Archive for the ‘シェル’ Category
historyに時刻を記録する
bash 3.0以上(最近のLinuxは大抵3.0以上)を使用している場合は、「HISTTIMEFORMAT」というシェル変数に時刻のフォーマットを入れることで、historyコマンドの実行結果(ファイル)にコマンドだけではなく時刻も記録できる。以下はhistoryコマンドの実行結果の例。
100 2011-11-22 10:16:59 ls 101 2011-11-22 10:17:03 cd /var/log/ 102 2011-11-22 10:17:04 ls
ホームディレクトリ以下の.bashrcや/etc/profile(全ユーザに適用したい場合)に
HISTTIMEFORMAT='%Y-%m-%d %T '
と書いておけばよい。時刻のフォーマットはdateコマンドと同じものが使えるようだ(man dateを参照)。
なお、historyコマンドでは上記のようなフォーマットが有効だが、.bash_historyファイルには、
#1321924619 ls #1321924623 cd /var/log/ #1321924624 ls
のように、UNIX時刻が付加される形で記録される。
bshでのクォーテーションの入れ子
特殊文字(?など)をそのまま文字として扱いたい場合などに、シングルクォーテーション(‘)やダブルクォーテーション(“)で文字をくくる。
- 「”」でくくった文字列は、その中に特殊文字が含まれているならそれを展開する。
- 「’」でくくった文字列は、その中に特殊文字が含まれていてもそれを展開せず、そのまま表示する。
[hoge@symf test]$ abc=3 ↑ abcという変数に3を代入 [hoge@symf test]$ echo $abc 3 ↑ abcという変数の中身を表示 [hoge@symf test]$ echo "$abc" 3 ↑ 「"」は特殊文字を展開するので変数として扱われるので、上に同じ [hoge@symf test]$ echo '$abc' $abc ↑ 「'」は特殊文字をそのまま表示する
クォーテーションを入れ子にする際には、シングルとダブルで少しやり方が違う。「man bash」の「クォート」の項には以下のように書かれている。
シングルクォートで文字を囲むと、クォート内部のそれぞれの文字は文字としての値を 保持 します。シングルクォートの間にシングルクォートを置くことはできません。これはバックスラッシュを前に付けても同じです。
ダブルクォートで文字を囲むとクォート内部の全ての文字は文字としての値を保持しま すが、 $, ‘, \ は例外となります。 $ と ‘ はダブルクォートの内部でも特殊な意味を失いません。バックスラッシュの場合は、次の文字が $, ‘, “, \,のいずれかである 場合に限り特殊な意味を失いません。前にバックスラッシュを付ければ、ダブルクォート文字をダブルクォートによるクォートの内部でクォートできます。
つまりこういうこと。
[hoge@symf test]$ ssh server "psql -c \"create database test with ENCODING = 'UTF8' ;\" " ↑ 「"」の中に「\"」があるので、これは成功 [hoge@symf test]$ ssh server 'psql -c \"create database test with ENCODING = 'UTF8' ;\" ' ↑ 「'」の中では「\」をつけてもダメなので、これは失敗
create databaseじゃなくてcreatedbを使えば、クォートを入れ子にしなくてもいいって?あくまで例ですから (`・ω・´)キリッ
Twitter
FourSquare