シェルパイプラインのパワーは非常に大きいので、時々失敗します。
同じようにたとえば、パイプライン
echo abc > file.txt
cat file.txt | sed 's/a/1/' > file.txt
私に空を与えますfile.txt
。シェルがおそらく>
最初に呼び出すことに気づき、私は変更を加えました。
echo abc > file.txt
{cat file.txt | sed 's/a/1/'} > file.txt
繰り返しますが、別の空のファイルで私を驚かせますfile.txt
。最終的に機能する醜い方法は
echo abc > file.txt
echo $(cat file.txt | sed 's/a/1') > file.txt
これにより、シェルは最初にサブシェルを実行し、次にリダイレクトします。
私はより良い練習を意識していますがsed
、あなたが取り除くことを可能にする、echo
、cat
、grep
...など、どのような私はここについての好奇心が完全にシェルの文法を学ぶことです。この質問は、上記の特定の問題を修正する方法に関するものではありません。
Q1(編集:オフトピック)文法を学ぶための良いリソースはありますか?
シェルが異なれば文法も異なる可能性があるので、
Q2シェルを冗長にして、コマンドを実行するたびにシェルが何をしているのかを明確に確認できますか?
Q3(編集:オフトピック)グッドプラクティスに関する他のアドバイスはありますか?ありがとうございました!
あなたはあなたがしてはいけないことの1つを首尾よく見つけました:-)あなたが取り組んでいるファイルに決してリダイレクトしないでください!
A1:シェル文法を学ぶための良いリソースは絶対bashスクリプトガイド、IMOでしょう
A2:bashスクリプトの場合set +x
、より詳細な出力に使用できますが、「プロンプトで実行する」レベルで同じことを実現する方法がわかりません。
A3:[solved]
検索語に追加します。あなたがすでに知っている問題の多くの代わりにあなたの問題の解決策を見つけます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加