bashでは、コマンドリンク
echo test > actual.txt
呼び出されたファイルの内容actual.txt
を「test」で置き換え、ファイルが存在しない場合は作成します。ただし、ファイルが存在する場合、bashはそれを開き、切り捨てて、新しい内容をファイルに書き込みます。
具体的には、リダイレクトコマンドはこのシナリオで失敗します。
ln -s /some/illegal/path link.txt
echo test > link.txt
Bash 4.4.12を使用すると、紛らわしいエラーメッセージが表示されますlink.txt: No such file or directory
。
これを回避する1つの方法は、リダイレクトされたコマンドを実行する前に、必ずファイルを削除することです。
rm link.txt && echo test > link.txt
しかし、この失敗モードを防ぐbashオプションまたはリダイレクト演算子の微調整があるかどうか疑問に思っていました。何か案は?
link.txt
へのリンクである/dir/file
ところ/dir
、あなたが書き込みと検索権限を持っているに型ディレクトリのファイルであるが、/dir/file
存在しない(とリダイレクションは、エラーメッセージを表示せずに、それを作成しますが)?どのような場合について/dir/file
存在するが、通常のファイルではありません(デバイス、FIFO、ディレクトリ...)、またはあなたはそれへの書き込み権限を持っているか、許可を検索しませんか/dir
?