標準エラー出力をパイプラインで次に渡す

表題を一部知らなかったのでメモ。

■ 環境

  • Linux
  • Mac OSX El Capitan

■ パイプライン

標準エラー出力をパイプラインで後続のコマンドの標準入力に渡すときはいつも下記のように実行していた。

$ command1 2>&1 | command2

上記のように実行すれば、標準出力と標準エラー出力がともにパイプラインで後続のコマンドに引き渡される。これを下記のようにも書けるようだ。

$ command1 |& command2

|&“は”2>&1 |“の短縮表記だそうである。是非覚えておこう。

以上。

cutで変数から切り出す

shellスクリプトにおいて表題の通り。

■ 環境

  • sh
  • Linux

■ cut

shellスクリプト内で変数の一部を切り出したい。”.“や”“などデリミタがはっきりしている変数の内容であれば楽なのだが今回は「3文字目から2文字」を抜き出したい。いわゆる”substr“的なことをやりたかった。`cut`でできるようだ。

$ echo "123456789" | cut -c '7-8'
78
$

上記のように切り出すことができる。

$ echo "123456789" | cut -c '3-7'
34567
$

下記のようなことも可能である。

$ echo "123456789" | cut -c '3'
3
$ echo "123456789" | cut -c '3,6'
36
$

以上。

ファイルが0byteでないかチェック

shellスクリプトにおいて表題を行いたい。

■ 環境

  • Linux

■ if

スクリプトの中で、ファイルが”0byte“であるかどうかチェックを行いたい。普段使う`if`での条件には、対象がファイルやディレクトリかであるのチェックである”-f“とか”-d“といったものを使っていたのだが、対象のファイルが存在しかつ”0byte“ではない、ということをチェックしたかった。`man`で見ると下記の通り。

$ man test
  :
       -s FILE
              FILE exists and has a size greater than zero
$

やりたいことそのままのオプションがあった。

以上。

date -d

表題をメモ。

■ 環境

  • GNU date
  • Linux

■ date

下記のような文字列がある。

May 28 23:59:59 2020 GMT

これをスクリプトの中で扱いたい、かつ動かしているホストではJSTなので表示も変換したりしたい。

$ date -d "May 28 23:59:59 2020 GMT"
Fri May 29 08:59:59 JST 2020
$

自身の指定するフォーマットで欲しい。

$ date -d "Fri May 29 08:59:59 JST 2020" +%s
1590710399

以上。

■ 関連

dateで前日の日付

dateでunixtimeを文字列に変換

date +%N

 

printf

shスクリプトの中での表題について。よく使うのにたまにド忘れするのでメモ。

■ 環境

  • sh

■ printf

0“パディングとかしたい時によく使う。

printf "%03d" ${COUNT}

といった感じ。

今日はサボり。

以上。