11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

shell小ネタ集

Last updated at Posted at 2014-03-27

これは同僚との会話をメモしたものです。

Bashはどこでも使えるのか

ほとんど全てのUnix系にbashは入っているらしい。
スクリプトはとりあえずbashで書いておけばよさそう

補完はshellの仕様にあるのか

ない

ファイル終端の改行

POSIX的にはテキストファイルの最後は改行コードが必須。
vimとかだと行末には必ず改行がはいるけどEclipseとかだと最後に空行を入れないといけなかったりする。

実行フラグ

実行フラグをつけておくと、ターミナルのコマンドとして実行でき、またPATHの中から探してくれる。
もし $ bash my_script.sh と実行してよいのであれば実行フラグを立てておく必要はない。 . my_script.sh の場合もフラグは不要

bashrcが会社の設定と家の設定がごっちゃになって困る

bashrcから bashrc_localをロードすればいいよ

Mac のPATHの設定

PATH の初期値は /etc/paths にある

bashrcにinputrc的なことを書きたい

"\C-P": history-search-backward
"\C-N": history-search-forward

bind '"\C-P": history-search-backward'
bind '"\C-N": history-search-forward'

のようだ

Ctrl+Cした時にfinallyが動かない

Javaはそうらしい。
Rubyは動く
PowerShellはfinallyは動くけど、echoできなくなる

SIGTERMとSIGINTはなぜ分けたのか、使い分けることはあるのか

「less で F を押すと tail -f っぽい動作になるんだが、 ^C (sigint) で中断できる」とのこと

set -x した時のコマンドがわかりにくい

PS4変数を書き換える

set -x を取り消す

set +x

なおバッチファイルで言う @echo off@は無いらしい。

zipコマンドでそのままのパスで圧縮されるのを避けたい

(cd target_dir && zip target_file)

子プロセスにすることでcdで戻ってこなくて良い

ワイルドカードが展開されない

ワイルドカードは見つかれば展開されるけど、見つからないとそのまま

cp *.html *.js *css target_dir

ってやると .js がひとつもないときに "*.js"という名前が渡されるのが困る。
コピーに失敗するとリターンコードが0ではなくなるので。

findを使えばよい

find . -name '*.html' -o -name '*.js' -exec cp {} target_dir \;

スクリプトのディレクトリがほしい

script_root=$(cd `dirname $0` && pwd)

パラメタをファイルに書いておく

args.txtはスペース区切りではなく、改行区切りでも普通にうまくいく

$ cmd $(cat args.txt)
11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?