タグ

shellに関するtekiomoのブックマーク (42)

  • シェルスクリプトでの標準入力の読み方 - USP友の会

    シェルスクリプトでの標準入力の読み方 友の会のページにあまりにもシェルスクリプトの情報が少ないので反省している会長です。 先日、あるサイトで、「シェルスクリプトで標準入力を読むためにはreadコマンドを使う」ということを書いてあったのですが、ちょっと補足が必要だと思いました。 確かに、下のようなスクリプトを使うと、標準入力を読むことができます。 ueda@uedaubuntu:~$ cat hoge.sh #!/bin/bash while read i ; do #数字を読み込んで1足して出力する。 echo $((i+1)) done 実行するとこうなりますね。 ueda@uedaubuntu:~$ seq 1 10 | ./hoge.sh 2 3 4 5 6 7 8 9 10 11 /dev/stdinを使おう でも、この方法は一番最後に、どうしようもないときにとるべき手段です。同じ

  • GitHub - shelljs/shelljs: :shell: Portable Unix shell commands for Node.js

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - shelljs/shelljs: :shell: Portable Unix shell commands for Node.js
  • 一見読みにくい記法もシェルスクリプトの流儀

    前回に引き続き、今回もOS付属のシェルスクリプトを読んでいく。「当にこれでいいのか?」と思うような読みにくい記述も見つかるが、よく読むとシェルスクリプトならではの流儀を学ぶことができる(編集部) とにかく何か作ってみろ シェルスクリプトはお世辞にも読みやすいプログラミング言語とは言えない。ほかの言語にはない特有のルールがあるので、あまり経験がない人がちょっと複雑なシェルスクリプトを読むと嫌になってしまうかもしれない。 その半面、シェルスクリプトにはちょっと書いてすぐに試せるという良い点がある。シェルスクリプトの解説書やソースコードを読みながら「なんだかよく分からない」「マニュアルを読んでもよく分からない」という人には、短くてもいいからとにかく何かシェルスクリプトを書いて、試してみることを強くお勧めする。 これはどんなプログラミング言語にも言えることだが、習得しようと思っても、解説書を読ん

    一見読みにくい記法もシェルスクリプトの流儀
  • 指定したバックグラウンドプロセスをデーモン化する - 元RX-7乗りの適当な日々

    昔、「ログアウト後もコマンドを実行し続けたい場合」というエントリで"nohup"コマンドの使い方を書いたのですが、nohupし忘れた時はどうすればいいのか、という話。 指定したバックグラウンドプロセスをデーモン化するためにdisownというbashの組み込みコマンドがあります。 #!/bin/sh while :; do sleep 5 done ためしに上記のようなスクリプトを用意して、"&"付で実行します。 $ sh test.sh & [1] 2692 $ jobs [1]+ 実行中 sh test.sh &次に、disownコマンドを実行します。引数には"%"+ジョブ番号を指定します。(上記例だとジョブ番号は"1") $ disown %1 $ jobs $ この通り。psコマンドの結果は↓ $ ps -edf ・・・省略・・・ nami 2692 1708 0 02:25 pts

    指定したバックグラウンドプロセスをデーモン化する - 元RX-7乗りの適当な日々
  • grepで指定オプションを自動付加してくれる環境変数 "GREP_OPTIONS" - 元RX-7乗りの適当な日々

    "GREP_OPTIONS"という環境変数に、常に付けておきたいオプションをあらかじめ指定しておくと、grepコマンドやxgrep(egrepとかfgrepとか...)を実行したときに、自動でオプションをつけて実行してくれます。 例えば、、、 $ export GREP_OPTIONS="--color=auto"とか。常に含めておくなら、あとは"-I"オプションとかですかね。これくらいなら"alias"でも良いわけですがw grepとか毎日使ってもおかしくないコマンドなので、こういう小さい効率化はどんどんやっていきたいところですね! オプション無しで実行した場合 GREP_OPTIONSを設定してから実行した場合 おまけ: --colorの色を変えたい場合 環境変数 "GREP_COLOR"に色コードを指定してやると良いです。 例えば、ハイライトを黄色にしたい場合とかは、以下のような感じ

    grepで指定オプションを自動付加してくれる環境変数 "GREP_OPTIONS" - 元RX-7乗りの適当な日々
  • bashスクリプトだけで、ファイル名、拡張子を取得する - 作業ノート

    シェルのパラメータ展開を利用して、basename、ファイル名(拡張子なし)、拡張子を取得する方法。 #!/bin/bash path="/path/to/foo.tar.gz" echo "path: $path" basename=${path##*/} echo "basename: $basename" filename=${basename%.*} echo "filename: $filename" extension=${basename##*.} echo "extension: $extension" via シェルのパラメータ展開でスクリプト自身のファイル名を取得する Man page of BASH

    bashスクリプトだけで、ファイル名、拡張子を取得する - 作業ノート
  • 垂れ流されるログのおしりを追いかける - (ひ)メモ

    滝のように流れるログは見ていて楽しいのですが、見ているばかりでは仕事にならないので、 https://github.com/hirose31/chase-tail というスクリプトを書きました。 機能はこんな感じで、 ログ中のきわどいキーワードに色をつけて目立たせる HTTPステータスの「50[0-9]」とかMySQLの「Lock wait timeout exceeded」とか 秒間にある一定行数以上ログが流れたら「NOTIFY_FLOOD」と出力する iTerm 2のPreferences→Profiles→AdvancedタブのTriggersにキーワードを登録しておくとGrowlで通知できるので、「NOTIFY_FLOOD」を登録しておけば、いつよりログがビャービャー流れたときにGrowlで知ることができます ちなみに、iTerm以外のアプリがフォアグラウンドでも、chase-ta

    垂れ流されるログのおしりを追いかける - (ひ)メモ
  • シェルスクリプト内で実行した cd コマンドをターミナルに反映させる方法を教わった - わからん

    シェルスクリプト内で実行した cd コマンドをターミナルに反映させたい。シェルスクリプト内でふつうに cd しても、子プロセスで cd するだけ。exec cd すればいいだろうと思ったのですがうまくゆかず、はてな人力検索で質問しました。そこで、a-kuma3 さんという方に、最後に exec /bin/bash すればよい という、目から鱗なアイディアを教わったので、自慢しておきます。 シェルスクリプト内で実行した cd コマンドをターミナルに反映させたい - 人力検索はてな 検証/理解の確認として、ターミナルで echo $$ し、次のスクリプト dummy.sh を実行し、再度ターミナルで echo $$ してみました。いうなれば、ターミナルで直接向き合っているカレントプロセスをシェルスクリプトのプロセスに差し替える技。なるほど。感動しました。 #!/bin/bash cd /tmp

  • シェルスクリプトの引数をそのまま別のコマンドにわたす command ${@+"$@"} - わからん

    シェルスクリプトの引数をそのまま別のコマンドにわたす。これは引数の多いコマンドに対し、いくつかの引数を固定にしたラッパーをつくるときなんかによく使います。今回の個人的なシェルスクリプトブームにのっかって、Bruce Blinn さんの名著「入門UNIXシェルプログラミング」にあった細かい指摘の仕組みも調べておきました。 以下の書き方では、引数がなかった場合、command に空文字が渡されてしまいます。細かいこと言っちゃってごめんね。 command "$@" だけど、次のようにすれば、空文字が渡りませんよ。 command ${@+"$@"} man を読むと、対象が null か unset されているなら何もパラメータ展開しない、つまり何もしないという定義をうまく適用したものだ、ということがわかりました。 ${parameter:+word} Use Alternate Value.

  • Term::UI - サクッと対話的に入力を求める - Articles Advent Calendar 2011 Casual

    こんにちは、コンビニに行くたびに店員さんから舌打ちされるdameninngennです。サックリと書きます! 対話的に処理を進めるスクリプト書いたりしますよね!あの[yes/no]とか聞かれて入力するやつです!! 例えばrsyncで--dry-runオプション付きで一旦実行して、そこから[yes/no]を聞いて当にsyncするかどうかみたいな感じのやつです!!! まず、標準入力から受け取るだけであれば、 my $str = <STDIN>; chomp $str; # do something # ... こんな感じに受け取ったりするかと思いますが、当に[yes/no]が入力されたのか判定したりそうじゃなかったらもう一回入力求めたりとか書くのめんどくさいですよね。 そこらへんのめんどくささとかを解消してくれるTerm::UIというモジュールがあります。 誤解を招くかもしれませんがTerm

    Term::UI - サクッと対話的に入力を求める - Articles Advent Calendar 2011 Casual
  • ターミナル内でグラフを表示する粋なコマンド - karasuyamatenguの日記

    こういうことができる: $ spark 0,30,55,80,33,150 ▁▂▃▅▂▇ 過去24時間の震度1以上の地震の頻度をターミナルで表示したりもできる: curl http://earthquake.usgs.gov/earthquakes/catalogs/eqs1day-M1.txt --silent | sed '1d' | cut -d, -f9 | tr "\n" ',' | sed 's/ //g' | spark ▅▆▂▃▂▂▂▅▂▂▅▇▂▂▂▃▆▆▆▅▃▂▂▂▁▂▂▆▁▃▂▂▂▂▃▂▆▂▂▂▁▂▂▃▂▂▃▂▂▃▂▂▁▂▂▅▂▂▆▆▅▃▆ githubのZack Holmanの作品だ https://github.com/holman/spark 彼の環境はMacなのだろう。Linuxでは動かなかったので、フォークしてUbuntu10.10で動くようにした。主にshと

    ターミナル内でグラフを表示する粋なコマンド - karasuyamatenguの日記
  • シェルスクリプトはエレガントでなければならない

    /bin/shの実体としてはash(dash)、bash、kshの採用例が多い。どのシェルもBourne shellの機能に加えて、拡張機能を提供する。 FreeBSDなどの*BSD系のOSは、ashを/bin/shとして使っている。ashはPOSIX.1(POSIX:2008)にいくらかのBSD拡張機能を取り込んだシェルだ。メモリをあまり消費せず、高速に動作し、ほかのライブラリに依存することが少ない。従って、rootやレスキューシステムのインタラクティブシェル、システムのシェルスクリプトといった場面で採用されている。 Mac OS Xはbashを/bin/shに採用している。FedoraやopenSUSEなどのLinuxディストリビューションもbashを/bin/shに採用している。LinuxディストリビューションでもUbuntuやDebian、Linux Mintなどは、高速に動作する

    シェルスクリプトはエレガントでなければならない
  • パイプでつないだコマンドの終了ステータスをとる

    cles::blog 平常心是道 blogs: cles::blog NP_cles() « コピペだけでレポートを作らせる :: AWS が Memcached 互換の Amazon ElastiCache をリ... » 2011/08/24 パイプでつないだコマンドの終了ステータスをとる  sh 483 1へぇ パイプでつないだコマンドの終了ステータスをとる方法が分かったのでメモ。 普通はあまり使わないテクニックですが、シェルスクリプトを組むときにパイプの前半部分の終了コードが必要になることがあります。 $ hogecmd | tee -a hoge.txt 例えば上記のようなコマンドの直後に$?で終了ステータスを取得すると、hogecmd ではなく、tee -a hoge.txt の部分の終了ステータスになってしまって、シェルスクリプトで条件分岐を書くときに困るのです。この制約を突

    パイプでつないだコマンドの終了ステータスをとる
  • Linux上でシェルが実行される仕組みを,体系的に理解しよう (bash 中級者への道) - 主に言語とシステム開発に関して

    バッチのまとめTOPへ bash 初級者は,簡単なコマンドが並んだだけの小さなスクリプトを書くことができる。 しかしシェルの動作原理をよく理解しておらず, 一歩進んだことをやろうとするとつまずく。 シェルスクリプトの中級者になるためには, Linux上でシェルが動作する仕組みを体系的に理解しておく必要がある。 (1) シェルとコマンドについて (1−1) シェルとは,OSに命令を出すために,OSを包んでいる外膜である。 (1−2) Linuxログイン時には,そのユーザ用のログインシェルが起動する。 (1−3) ユーザが打ち込んだコマンドは,実行前に,bashによって整形される。 (1−4) コマンドの先頭の文字列は,実行可能ファイルか,またはbashの組み込みコマンドである。 (2) コマンド間の連携について (2−1) コマンド呼び出しとは,サブプロセスの生成である。 (2−2) 親プロ

    Linux上でシェルが実行される仕組みを,体系的に理解しよう (bash 中級者への道) - 主に言語とシステム開発に関して
  • Error: Lendaland

  • シェルスクリプト/文法/配列(連想配列) - yanor.net/wiki

    配列(連想配列) 初期化 ARR[0]=1 ARR[1]=2 ARR[2]=3 または ARR=(1 2 3) コマンドの結果を配列に格納する files=($(ls /tmp/)) 1つの要素を参照 echo ${ARR[0]} # => 1 echo ${ARR[1]} # => 2 echo ${ARR[2]} # => 3 全要素を参照 echo ${ARR[@]} # => 1 2 3 for a in ${ARR[@]}; do echo $a # => 1(2,3,...) done 配列の大きさ size=${#ARR[@]} # n = 3 ループの中で初期化 for i in 1 2 3; do n=${#ARR[@]} ARR[$n]=$i done echo ${ARR[@]} # => 1 2 3 配列に要素を追加(push) ARR1=(1 2 3) ARR1=

  • xargsもすごいのでもう死ぬしかない | uuu

    GNU Parallelがすごすぎて生きるのがつらい GNU Parallel いいかもね xargsでもできるよ! $ yes | head -n10 | sed 's/.*/localhost/g' > server.list $ xargs -P0 -t -a server.list -I% ssh % "vmstat 1 2|tail -1" ssh localhost vmstat 1 2|tail -1 ssh localhost vmstat 1 2|tail -1 ssh localhost vmstat 1 2|tail -1 ssh localhost vmstat 1 2|tail -1 ssh localhost vmstat 1 2|tail -1 ssh localhost vmstat 1 2|tail -1 ssh localhost vmstat 1 2|

    tekiomo
    tekiomo 2011/06/01
    -P0でとにかくいっぱい並行処理される。-P8だと8プロセスが並行して走る感じ。makeの-jと同じかな。
  • Bash/KSH/SH Shell: Find The Length Of a String On a UNIX, Linux, BSD, and OS X

    tekiomo
    tekiomo 2011/05/18
    expr length "nixcraft" myVar="nixcraft";echo ${#myVar}
  • シェルスクリプト --Mukuan Task Force--

    シェルスクリプトとは シェルスクリプトの書式 シェルスクリプトの実行 シェルスクリプト内の変数 シェルスクリプトの特殊変数 条件分岐(if文) test文 シェルスクリプトとは シェルスクリプトとは、コマンドラインで実行する一連のコマンドをファイルを書き出し、逐次実行するものです。 bashなどのシェルに組み込まれているインタプリタが一行一行順に実行してくれます。 また、条件分岐や繰り返しなどの機能がある為、簡単なプログラムを組むことができます。 シェルスクリプトの書式 シェルスクリプトを書く場合の決まり事は、他のプログラム言語とくらべて非常に少ないです。 インタプリタのパスの指定ぐらいになります。基的には、コマンドの羅列になります。 シェルスクリプトの例(bash) インタプリタのパスを指定 echoコマンドを使用して、引数の文字列を表示 echoコマンドを使用

    tekiomo
    tekiomo 2011/05/08
    -L ファイル名ファイルがシンボリックリンクであれば真
  • http://hub.opensolaris.org/bin/view/Project+shell/shellstyle