Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
10月末に行われた第19回シェル芸勉強会の問題をふと思い出すことがありました。 最初の問題が、端末で実行した場合とシェルスクリプトに書いて実行した場合で動きを変える、という内容でした。出題者上田さんの解答例では、aliasが効くかどうかで判定していました。 問題と解答は、出題者上田さんが公開されているページQ1をご覧ください。 b.ueda.tech この問題の意味は、シェルの状態が対話(インタラクティブ)モードかどうか?の判定をどうするかということだと思います。 ところでFreeBSDのデフォルトログインシェルはtcshです。FreeBSDのサーバで作業をしていた時に、ふとシェルの設定ファイルを確認してみました。デフォルトで提供される設定ファイルが下記のようになっています。 > tail -n +24 .cshrc if ($?prompt) then【←シェル変数promptが定義され
特に、cd や bindkey など、今動いているシェル上で副作用のある処理を行いたいときは source を使わないとうまくいかないだろう。 一方、source にはこんなデメリットがある。 .zshrc でいっぱい source するとzsh の起動が遅くなる 現在動いているシェルの alias 設定の影響を受ける 特に2つめが厄介だ。例えば grep とかしたときに、alias grep='grep -E' なんか設定してあったら正規表現の意味が変わってしまう。一応 command grep とすれば alias を設定していない元の grep を実行できるけど、いちいちそう書くのも手間だ。 そんなときは autoload を使う形に書き換えるとうまくいく。 autoload というのは「関数本体の読み込みを実行する時まで遅らせる」という zsh の機能のこと。これで ~/.zshr
実行時間が長いコマンドが終わったら、zshが勝手にGrowl通知してくる (Mac/Linux/SSH接続先)ZshMacLinuxGrowlMacOSX Linuxカーネルのmakeとか、実行に時間のかかるコマンドを実行して、終わるのを待って眺めるのは辛い。でもその隙に別のことをやると、そのまま完了を待っているのを忘れてしまって時間を無駄にした気持ちになって辛い。&& growlnotify とかコマンドの後につけるのを忘れたことに気がついて、Ctrl-Cで一旦止めるかどうか悩むのが辛い。 というわけで zshのフックを適当に使って、普通にzshでコマンドを叩くだけで、閾値以上の時間がかかるコマンドが終わると通知してくれる設定を考えてみた。 MacのGrowl 対応 ( growlnotify 必須 ) Linuxのデスクトップ通知対応 ( notify-send 必須 ) SSH接続先
まず, 他のシェルをお使いの人にはごめんなさい. aliasコマンドの-sが使えるのは zsh 4.2.x- で, 他のシェルでは実装されていないと思います. あと, もう既に alias -s 知ってるよーって人は読まなくていいです. alias -s って何? 打ったコマンドの後ろ(suffix)を見て, 適当に宜しくやってくれるやつです. 次の例を見て下さい. ~$ echo "print ('hello, world')" > hello.py ~$ python hello.py hello, world ~$ alias -s py=python py=python ~$ ./hello.py hello, world ~$ Pythonのコードは python hello.py で実行出来ますが, お尻が py なら python を使います, とaliasしておけば, ./
zsh Advent Calendar もいよいよ最終日なった。便利な使い方とかがいっぱい載ってるので、まだの人は見てみると良いと思う。 こういう Advent Calendar とか便利な Tips とかの記事なんかは、読んでると自分なりにカスタマイズしたくなってくる。それに、単純にコピペするだけじゃなくて、何をやってるのかちゃんと理解したいって人も多いと思う。 でも、そういうときに困るのが、なんか変な記号みたいなのがいっぱいあって何やってるか分かんなくなること。 例えばこんな感じ。 意味わかんないし、(N-/) とかググってもうまく検索できない。 この手の記号とかはいっぱいあるし、知らないことがあるのはしょうがない。でも「調べ方が分からない」ってのはだいぶまずい。「知らなかったとしても必要なときに調べられる」ことが大事だと思う。 というわけで zsh の分かりにくい記号、用語をまとめて
同じ zshrc を複数の環境で使っているとたまにあることですが、古いバージョンだと無効な設定があったりしておこられることがあります。 以前は zsh --version | awk '{print $2}' みたいな感じでバージョンを取得して "." で split して比較してた頃もありました。 これだと細かいバージョンの指定をしようとするとめんどくさかったりします。 同様のことを is-at-least を使えば簡単にできますよっていうお話です。 例えば vcs_info を使おうとした際は 4.3.10 以上となるので以下のようにかけばおkです
後輩が cat README | tr ' ' '\n' | sort | uniq -c | sort -nr | head てなテクニックを見て、びっくりしたみたいな話をしていたのだが、こういうパイプラインを利用するテクニックを学んでいないのは色々損な気がする。 ていうか、サーバで丸一日以上かかるような処理を実行するのもしょっちゅうなのに、GNU screen も nohup も知らないってのはいろいろ支障があるような気もするのだが、だれも教えないものかなぁ。 ということで、bash or zsh のちょっとしたテクニックとか*1。リダイレクトとかパイプラインは略。 連続実行 単純に連続実行。 % foo; barfoo が正常終了したときだけ bar を実行 % foo && barfoo が正常終了しなかったときだけ bar を実行 % foo || bar&&、||は本来は論理演
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く