b.l0g.jp

Archive for the ‘シェル’ Category

historyに時刻を記録する

without comments

このエントリーをはてなブックマークに追加
はてなブックマーク - historyに時刻を記録する
Share on Facebook

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時刻が付加される形で記録される。

Written by admin

11月 25th, 2011 at 12:05 am

Posted in シェル

bshでのクォーテーションの入れ子

without comments

このエントリーをはてなブックマークに追加
はてなブックマーク - bshでのクォーテーションの入れ子
Share on Facebook

特殊文字(?など)をそのまま文字として扱いたい場合などに、シングルクォーテーション(‘)やダブルクォーテーション(“)で文字をくくる。

  • 「”」でくくった文字列は、その中に特殊文字が含まれているならそれを展開する。
  • 「’」でくくった文字列は、その中に特殊文字が含まれていてもそれを展開せず、そのまま表示する。
[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を使えば、クォートを入れ子にしなくてもいいって?あくまで例ですから (`・ω・´)キリッ

Written by admin

8月 3rd, 2011 at 9:30 pm

Posted in シェル