誤ってパイプの代わりに出力リダイレクトを使用する

誤ってパイプの代わりに出力リダイレクトを使用する

1ヶ月前、私はstdinでMACとIPアドレスをマッピングするPythonスクリプトを書いていました。 2日前に覚えていて、出力フィルタリングに使用しましたが、誤字が原因でtcpdumpエラーが発生しました。私は入った

tcpdump -ne > ./mac_ip.py

出力は何もありません。ただし、入力を解析できない場合は、出力が「不明」である必要があるため、そうしてプログラムの代わりにすべてのcat ./mac_ip.pyデータを見つけました。tcpdumpそれから使用すべきことに気づきました。

tcpdump -ne | ./mac_ip.py

プログラムを復元する方法はありますか?とにかくプログラムを書き換えることができますが、より重要なプログラムでこのようなことが再び発生した場合は、何かを行うことができなければなりません。または、ファイルを確認して実行可能かどうかを警告するように出力リダイレクトを指示する方法はありますか?

ベストアンサー1

リダイレクトが原因で既存のファイルを上書きしないようにするには、POSIXに似たシェルのオプションを>使用します(ここでは/代わりに機能が実際に発生する場所でもあります)。その後、ファイルを強制的に置き換える必要がある場合は、リダイレクト演算子(in)を使用してください。noclobberbash(t)cshset noclobberset -o noclobberset -C>|>!(t)csh

例:

$ echo abc > file
$ set -o noclobber
$ echo xyz > file
bash: file: cannot overwrite existing file
$ echo xyz >| file
$ cat file
xyz

ただし、以下を使用して現在の設定を確認できますset -o

$ set -o
...
monitor         on
noclobber       on
noexec          off
...

おすすめ記事