タグ

shellに関するmas-higaのブックマーク (65)

  • spark: シェルスクリプトで棒グラフ表示

    B! 251 0 0 0 GitHubで面白そうなシェルスクリプトを探してる時に見つけた Spark by holman について。 数値を棒グラフ上に表示してくれるスクリプトです。 Spark 使用例 Spark Spark は数値群を引数に与えるか標準入力で与えてあげると その数値群を棒グラフに変換してくれるシェルスクリプトです。 インストールはGitHubのレポジトリ から直接sparkというスクリプトファイルを取ってきてPATHの通った所に入れるか、 MacであればHomebrewで $ brew install spark でsparkコマンドが使えるようになります。 使い方は非常にシンプルで $ spark 0 20 40 60 80 100 ▁▂▃▅▆█ こんな感じで数値を与えるとそれを棒グラフにしてくれます。 インプットに使える数字は少数も使えますが、 実際に使われる際には

    spark: シェルスクリプトで棒グラフ表示
    mas-higa
    mas-higa 2015/05/21
    解像度が低いのが逆にいい
  • シェルスクリプトの中で1行ずつ変数を分割する際には、cutとかawkとか余計なプロセスを起動せずsetを使って分割した方が効率的 - 双六工場日誌

    シェルスクリプトの中で、スペース区切りもしくはタブ区切りのレコードを扱うことがよくあると思います。 たとえば、前回のエントリ「AWS CLIとjqを使って、AWSのELBボリュームがアタッチされているEC2インスタンス名を出力するワンライナーを書いた - 双六工場日誌」のスクリプトの出力は以下のようになります。 i-ec56a9f5 vol-07d00601 servername i-ec56a9f5 vol-8f550991 servername このようなレコードの特定の列を取り出して、処理する際にどうするのが効率的か、というのがこのエントリのお題です。 非常に古い話題なので、昔からシェルスクリプトを書いている人には自明な話ではありますが、最近、シェルの標準機能の話を聞く機会がなく、失われつつある技術になってきている気がしているので、改めて確認ということで。 例として挙げたレコードから

    シェルスクリプトの中で1行ずつ変数を分割する際には、cutとかawkとか余計なプロセスを起動せずsetを使って分割した方が効率的 - 双六工場日誌
    mas-higa
    mas-higa 2015/02/17
    "そもそも一つのプロセスで処理できる..." ユニケージ開発手法というのがあってな
  • bash/zshでsourceされたスクリプト内で、ファイル自身の絶対パスをとるシンプルな記法 - Qiita

    追記: コメント欄にて、若干変なパスが含まれている場合の対処方法について、補足いただきました。 ご指摘ありがとございますm(_ _)m bash / zshなどでシェルスクリプトを書いていると、環境変数の設定を外部ファイルにまとめてsource して使う、というのはよくある。 そのような場合にsourceされたファイル内での絶対パスがイマイチうまく取れない、という問題に突き当たる事がある。 bashの話: うまくいかない方法と理由 通常、シェルスクリプト内で自分自身の絶対パスをとるときによくやるのが下記の手法だとおもう。 が、単体で呼び出した場合にはちゃんと動くのだが、bashからsourceで呼び出した場合にはうまく動かない。 なぜかというと、sourceされたファイルの実行が、呼び出し元のシェルプロセス内になるから。 bashでは$0は実行コンテキストに依らず、実行ファイル名が入ってい

    bash/zshでsourceされたスクリプト内で、ファイル自身の絶対パスをとるシンプルな記法 - Qiita
    mas-higa
    mas-higa 2015/01/05
    script 自身の絶対パスが取りたい理由がわからん
  • シェルで変数のインクリメントに expr を使うと100倍遅い件

    シェルプログラミングにおいて、ループカウンタなどをインクリメントするとき、どのようにしますか? いきなりですがサンプルから。 #!/bin/bash COUNT=0 while [ $COUNT -lt 1000 ]; do # 何かの処理 COUNT=`expr $COUNT + 1` # COUNT をインクリメント done expr コマンドを使う? シェルプログラミングの入門記事などを見ると、変数のインクリメントに上記のような COUNT=`expr $COUNT + 1` を用いているものが多くあります。 しかし、この書き方は とても遅い です。空のループを1000回繰り返すだけでも手元の mac (Core i7) で約2秒もかかってしまいました。

    シェルで変数のインクリメントに expr を使うと100倍遅い件
    mas-higa
    mas-higa 2014/12/28
    シェルスクリプトで速度気にしてもねぇ
  • zshのPATHの自動重複削除や余計なPATHの削除 - @znz blog

    シェルの中から exec zsh をしたり、 GNU screen や tmux を経由して間接的にシェルの中でシェルを開いたりするときに 何も考えずに PATH を追加していくと どんどん長くなっていってしまうと思います。 bash などでも使えるように汎用的にしようとすると自前で頑張らないといけないのですが、 zsh では zsh 自体の機能で簡単に重複を防げます。 また、パスに望ましくないものが入っていた時に削除する方法も紹介します。 この投稿は zsh Advent Calendar 2013 の12日目の記事です。 重複削除 重複を削除するには

    mas-higa
    mas-higa 2014/12/12
    "何も考えずに PATH を追加していくと どんどん長くなっていってしまうと思います" .profile と .*rc の使い分けで、どうにかならんの? (bash では、リモートログインとか含めて考えると無理ゲーって聞いたことある)
  • パイプとフィルタ ~ソフトウェア工学における有用なアーキテクチャ~ | POSTD

    パイプライン は、最近のソフトウェアエンジニアリングにおいて、非常に便利な(そして驚くほど活用されていない)アーキテクチャパターンです。ソフトウェアでデータの流れを制御するためにパイプとフィルタを用いる考え方は、最初のUNIXシェルが作られた1970年代からあります。もしターミナルエミュレータでパイプ” | ”を使ったことがあるなら、”パイプとフィルタ”を活用できていることになります。以下の例を見てみましょう。 cat /usr/share/dict/words | # Read in the system's dictionary. grep purple | # Find words containing 'purple' awk '{print length($1), $1}' | # Count the letters in each word sort -n | # Sort l

    パイプとフィルタ ~ソフトウェア工学における有用なアーキテクチャ~ | POSTD
    mas-higa
    mas-higa 2014/11/25
    pressure というプロダクトの宣伝。$PIPESTATUS とか mkfifo とかで満足した人がそこまで読んだかどうか。
  • シェルスクリプトで外部コマンドを利用する場合の注意点 · さよならインターネット

    November 10, 2014 TL;DR シェルスクリプトでbackquoteを見つけたら オールドスタイルおじさんを探し、矯正させよう GNU Bash-2.05 manual When the old-style backquote form of substitution is used, backslash retains its lit- eral meaning except when followed by $, `, or \. The first backquote not preceded by a backslash terminates the command substitution. When using the $(command) form, all characters between the parentheses make up the comm

    mas-higa
    mas-higa 2014/11/11
    ash で動かないのでは
  • シェルスクリプト(sh/bash/zsh)で変数から変数へ代入する方法について - Qiita

    以下 sh/bash/zsh について同様ですが、例では bash とします。 変数から変数への代入 シェルスクリプトで変数から変数へ代入する場合、ダブルコーテーション(")で括る必要はありません。

    シェルスクリプト(sh/bash/zsh)で変数から変数へ代入する方法について - Qiita
    mas-higa
    mas-higa 2014/08/24
    変数から変数へ代入することが、ほとんどないけど…
  • nanapi勉強会vol2でshellについて話す会を企画した&話した&まとめた - UNIX的なアレ

    個人的なShellTipsをまとめてみた - UNIX的なアレ 以前に話題になったネタでこんなエントリーを書きましたが、どうならもっといろいろな人の話を聞いてみたいよね、というわけでid:sotarokと話しててこの勉強会をやることになりました。 もともとのコンセプトとしてはshellのウルトラなテクニックを紹介するというよりも、なんかイマイチ使いこなせてない感がある人とか、めんどくさい作業をめんどくさいと感じずにやっている人向けな内容です。 そんなわけで、私が発表した内容は以下のスライドです。 なんか途中からemacsの話してるんですけど、emacsは概念だしレイヤーが違うので特に問題はありません。なおやさんもemacsの話してたし。 その他、当日の資料が上がっていますのでまとめてみました。 当日の資料 当日の発表内容はこんな感じです。全体的にすごく興味深い話でした。まず今日からzaw使

    nanapi勉強会vol2でshellについて話す会を企画した&話した&まとめた - UNIX的なアレ
  • シェルスクリプトを公開するとき, コマンド前にバックスラッシュをつけるべき - Shohei Yoshida's Diary

    oh-my-zsh の環境で、peco-select-history が動かない - Qiita 追記 2014年 7月 7日 シェルスクリプトと書いてしまい漠然すぎましたが, ここで述べている ことが問題になるのは, .bashrc, .zshrcに関数, alias設定等がコピー される場合や, sourceコマンドでファイルを読み込む場合です. non-interactiveに実行されるシェルスクリプトについては特に 問題ないです. 問題点 そうしないと, 公開されたコマンドを自分の環境に導入した場合, aliasにより正しく動かなく場合があるためです. aliasをつけがちな コマンド(ls, grep等)がシェルスクリプトに含まれていると 特に問題が起こる可能性が高くなります. 例 pecoを使って カレントディレクトリのファイルをページャで開く 例を考えてみましょう. 単純に考

    シェルスクリプトを公開するとき, コマンド前にバックスラッシュをつけるべき - Shohei Yoshida's Diary
    mas-higa
    mas-higa 2014/07/04
    "コピペされまくるおそれが" そんなんコピペする側で注意してくれ
  • 使いやすいシェルスクリプトを書く

    できればシェルスクリプトなんて書きたくないんだけど,まだまだ書く機会は多い.シェル芸やワンライナーのような凝ったことではなく,他のひとが使いやすいシェルスクリプトを書くために自分が実践していることをまとめておく. ヘルプメッセージ 書いてるシェルスクリプトが使い捨てではなく何度も使うものである場合は,体を書き始める前に,そのスクリプトの使い方を表示するusage関数を書いてしまう. これを書いておくと,後々チームへ共有がしやすくなる.とりあえずusage見てくださいと言える.また,あらかじめ書くことで,単なるシェルスクリプトであっても自分の中で動作を整理してから書き始めることができる.関数として書くのは,usageを表示してあげるとよい場面がいくつかあり,使い回すことができるため. 以下のように書く. function usage { cat <<EOF $(basename ${0})

    mas-higa
    mas-higa 2014/05/27
    usage は cat <<EOF >&2 じゃないのか? / set -x したければ sh -x file でおk
  • ポータブルなシェルスクリプトを書く - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    拡張 POSIX シェルスクリプト Advent Calendar 2013、19日目の記事です。 うおー、あと 30分で書かないといけねー! 雑な内容ですみません。 今日はポータブルなシェルスクリプトの書き方ついてざっくり語ります。 UNIX 系 OS であれば大抵の OS / バージョンでも動くシェルスクリプト!! (ただし外部コマンドの非互換性の問題は除く) #!/bin/sh で書く POSIX sh でスクリプトを書けば完璧! shebang は #!/bin/sh!! …全然完璧ではありません。Solaris 10 のように /bin/sh が POSIX sh でない残念な OS がまだ生き残っています。 マニュアルにも載っているバグが仕様になったのではないかと思われる謎挙動や未知のバグを回避するのが大変です。 ポータブルにするには #!/bin/sh はまだ推奨できません。

  • コマンド実行でシェルが怖いなら使わなければいいじゃない - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    http://blog.ohgaki.net/os-command-escape-shell-spec-command-implementation 「えすけーぷじゅうよう!!」を強調して言いたいからなのかシェルの理解が足りないからなのか、 意図がよくわからない文言やら説明が散見されますが、きりがないのでそれらはスルーします。 (シェルについては、なんで関係ない tcsh の話が出てくるんだとか、 位置パラメーター展開に $* 使うなとか、色々) 特に気になったのが以下の文章です。(強調は私によるもの) OSコマンドはOSが提供するシェルで実行されます。 シェルはテキストインターフェースを持ち、 テキストでコマンドとオプションを受け取り実行します。 例示した脆弱なPHPプログラムの場合、 ユーザーからの入力に対しセキュリティ処理を一切してないため、 簡単にサーバーを乗っ取られる可能性があり

    mas-higa
    mas-higa 2013/12/24
    "オプションでない引数を渡す場合は、 オプション終端オプション -- 以降に指定することも重要です。" kwsk
  • コマンドパイプラインの終了コード - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    拡張 POSIX シェルスクリプト Advent Calendar 2013、18日目の記事です。 今日も書く暇がなかったので軽く済ませます。すみません。 今日は Twitter で @koie さん からシェルネタを振られたので、 勝手に採用して、もう少し詳しく紹介したいと思います。 コマンドの終了コード 実行したコマンドの終了コードはシェル変数 $? で取得できます。 $ true $ echo $? 0 $ false $ echo $? 1 $ grep 使用法: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information. $ echo $? 2

  • コマンド種別の判定と使い分け - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    拡張 POSIX シェルスクリプト Advent Calendar 2013、17日目の記事です。 時間がないのでやっつけです。間違いがあったらすみません…。 今日はシェルから起動するコマンドが何者かを知る方法と使い分ける方法を紹介します。 コマンドの種類 シェルのコマンドラインから起動されるコマンドの種類として以下の 4つがあります。 (for などの制御構文は除く) シェルのコマンドエイリアス シェルの関数 シェルの組込みコマンド 外部のコマンド ほかにもあったっけ? いまいち自信なし。 エイリアスがコマンドかどうかはさておく。 コマンド種別の判定方法 シェルの種類に依って色々な判定方法があるのですが、 一番ポータブルなのは組込みコマンド type を利用する方法です 旧来の sh でも使えます。 $ alias aliasname='echo foo' $ type aliasnam

    mas-higa
    mas-higa 2013/12/18
    $ type command # => command is a shell builtin
  • test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog 拡張 POSIX シェルスクリプト Advent Calendar 2013、15日目の記事です。 書くのが遅れ、ネタは尽きかけ、 マニアックさやニッチさが足りなくなってきているような気がします。 ふつうの内容ですみません。 今日は test, [, [[ コマンドの違いについてざっくり紹介します。 [[ がある bash, ksh, zsh ならば test と [ の使用は避け、 [[ を使用すべきです。 [ は慎重に使わないと様々な罠にかかるため危険です。 (翌日のネタも併わせてどうぞ) test と [ の違い どちらもシェルの組込みコマンドです。名前が違うのと [ は最後の引数を ] にしなければいけない縛りがある以外、 動作まった

    mas-higa
    mas-higa 2013/12/16
    一方で /usr/bin/test (/usr/bin/[) があるのも事実。
  • read コマンドの使い方 - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    拡張 POSIX シェルスクリプト Advent Calendar 2013、13日目の記事です。 今日のネタは組込みコマンド read の解説と使い方を紹介します。 read コマンドとは? read の基仕様・動作は次の通りです。 シェルの組込みコマンドである。 標準入力を読み、一行読み込むか EOF になると終了する。 終了コードは、行を読み込めたときは 0、 読み込めなかったとき (EOF も含む) は 1 となる。 引数にシェル変数名が指定されていたら読み込んだ行を変数に格納する。 読み込んだ行の末尾に改行が付いていたら削除した値となる。 引数のシェル変数名が複数指定されていたら区切り文字 (デフォルトはスペースとタブ。シェル変数 $IFS の値) で分割して変数に格納する。 入力の区切り文字はバックスラッシュ \ で分割をエスケープすることができる。 代表的なオプションは次の

    mas-higa
    mas-higa 2013/12/16
    "while と組み合せて使用したときに、 最後の入力の処理が抜け落ちてしまう可能性"
  • 日本語対応 wdiff で単語ごとの差分表示 - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    語対応 wdiff で単語ごとの差分表示 - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog Doc-ja Advent Calendar 2013 兼 拡張 POSIX シェルスクリプト Advent Calendar 2013、12日目の記事です。 今日は翻訳作業に役立つツールを 2つ紹介します。 単語ごとの差分を表示する wdiff コマンドと、 その日語対応版 jwdiff コマンドです。 wdiff の紹介 wdiff はテキストデータの差分を単語ごとに示してくれるツールです。 一般的によく利用されるテキストデータ差分表示ツールである diff は、 行ごとに差分を表示します。 $ diff -u en.txt.old en.txt --- en.txt.old 2013-12-12 02:16:42.309525648

    日本語対応 wdiff で単語ごとの差分表示 - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog
  • FizzBuzz.sh - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    拡張 POSIX シェルスクリプト Advent Calendar 2013、13日目の記事です。 ようやく折り返し地点まできました。もう疲れました。 日は FizzBuzz をお楽しみください。 一応コードゴルフ頑張ってます。もっと短いのをご存知でしたら教えてください。 ところで、12月25日はクリスマスな上に、 OSS 界隈で地味に活躍されているふみやすさんの誕生日ですね! っ http://www.amazon.co.jp/registry/wishlist/27M7TV8CEEF6G?sort=priority 逆に、あなたの書いた OSS や Blog や Advent Calendar が気に入ったら何か送りたく なってしまうかもしれないので、プロフィールや Web サイトに あなたの Amazon 欲しいものリストの URL を貼っておいてくださいね! 私が勤める OSST

  • パイプラインとサブシェルの問題はシェル依存 - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    パイプラインとサブシェルの問題はシェル依存 - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog 拡張 POSIX シェルスクリプト Advent Calendar 2013、10日目の記事です。 そろそろネタが尽きそうです。 スクリプトの添削依頼や疑問・質問、やって欲しいネタをお待ちしております。 記事に反映できるかどうかは内容や私の実力次第ですが…。 今日はコマンドパイプラインを実行したときの変数のスコープの問題について紹介します。 「あー、パイプラインとサブシェルの問題だね。知っているよ!」という方も、 最後までお付き合いいただけると新しい発見があるかもしれません。 まずシェルスクリプトのお題として 「メンバー情報が空でないグループの数とグループ名の一覧をカンマ区切りで表示するスクリプトの作成」 を考えてみます。 実装のポイントは次