シェルスクリプト書くときになかなか覚えていなくて、かつググラビリティが低い情報をまとめてみました。 6/19 コメントを元に一部修正しました hnakamurさんありがとうございます! 参考になる文献 test bash manual zsh manual 特殊な変数 変数 説明
こんにちは、7月になりましたね。本日7月2日は『フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門』発売日でございます。KADOKAWA/アスキー・メディアワークス様、ご献本いただきまして有難うございます。 [amazonjs asin="4048660683" locale="JP" title="フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門"] 目次だけを読むと、bashでCMSを作るのに特化した解説本のように見えますが、CMSのコードは全体の3割もなく、実際にはawkやsedの文字列処理、bashの関数の使い方など、シェル芸勉強会 会場で「できた!」の名乗りを上げるのに非常に役立つTIPSの集合体とも言えましょう。 勿論本書の目的はシェル芸勉強会対策本ではないのですが、bashCMSを作る、という題材を通して、UNIXのお作法だけでこれだ
とあるコマンドで bash の補完書きたいなぁと思って、そうすると bashrc 的なの書いて~/.bashrcとかでsource使って読み込ませることになると思います。 んで、コマンドと bashrc がセットみたいな感じなので、以下の様な感じのディレクトリ構成で適当に配置して、sourceで読み込ませたらついでに PATH も通してくれるとうれしいなと思ったわけです。 /path/to/ `-- kamipo |-- bin | `-- make_kanojo `-- etc `-- bashrc $ source /path/to/kamipo/etc/bashrc $ which make_kanojo /path/to/kamipo/bin/make_kanojo sourceに渡す引数は絶対パスだけでもいんですが、手で実行するときとか相対パスとか、ファイル名だけとかそういう感じ
いろいろ方法があるとおもうのですが、以下のようなシェルスクリプトですませるのはどうでしょうか? #!/bin/bash function kill_children { # jobs -l | perl -ne 'print "kill $1\n" if /^\S+?\s+(\d+)/' | sh; pkill -P $$; wait; } trap "kill_children" EXIT HOSTS="192.168.1.1 192.168.1.2" for host in $HOSTS do ssh $host tail -F /service/foo/log/main/current & done wait ちょっと箇条書きで解説すると以下のようなことをおこなっています。 & でバックグラウンドジョブをはしらせるwait でそれらの終了を待つtrap 〜 EXIT は atexit
shell script は普段さけて通りたいと願ってやまないわけですが、たまには書かないといけないことがあるので、そういうときは覚えておくと便利な tips を2つ。 autodie っぽくするset -eとすると、コマンドの実行に失敗したときにそこで実行がとまるので便利。 #!/bin/sh set -e perl -e 'die' echo SHOULD NOT REACH HEREとすると % ./hoge.sh Died at -e line 1. % echo $? 255となって、最後までいかずに死にます。 複数のコマンドを順番に実行するときに便利。 なお、以下のような挙動をするんだそうです。 ただし失敗したコマンドが until または while ループの一部である、 if 文の一部である、 && または || リストの一部である、 コマンドの返り値が ! で反転されてい
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く