LoginSignup
1
0

More than 1 year has passed since last update.

【Bash】リダイレクト先が書き込めない場合、そのコマンドは実行されない

Posted at

TL;DR

bash
$ #実行すると標準出力と標準エラー出力に文字列を出す関数を作る
$ f() { echo "stdout"; echo "stderr" >&2; }
$ f
stdout
stderr
$
$ #リダイレクトに成功する場合、標準エラー出力が画面に出ることを確認
$ #つまり"stderr"が画面表示=コマンド実行されている
$ f > /tmp/f.log
stderr
$
$ #存在しないディレクトリのファイルにリダイレクトしてみる
$ #標準エラー出力が表示されない=コマンド自体が実行されていない
$ f > /tmp/hoge/fuga/f.log
-bash: /tmp/hoge/fuga/piyo.log: No such file or directory
$
$ #書き込めないディレクトリとして、tmpfsをReadOnlyマウントする
$ #標準エラー出力が表示されない=コマンド自体が実行されていない
$ mkdir -p /tmp/ro-tmpfs
$ sudo mount -t tmpfs -o ro tmpfs /tmp/ro-tmpfs
$ f > /tmp/ro-tmpfs/f.log
-bash: /tmp/ro-tmpfs/f.log: Read-only file system

備考

このときの終了ステータスは 1 になる。

環境

GNU bash, version 4.4.23(1)-release

日記

コマンドの実行時出力をファイルに残そうとしてハマった。
冷静に考えると当たり前の挙動だが、意外と悩んだ。

1
0
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
1
0