ほとんどの作業を解決するために、時々使用する正確なコマンドとコツを覚えておらず、後で参照できるようにファイルに記録しておきたいと思います。私がよくやっていることは、コマンド全体をechoに入れてファイルにすばやく追加することです。
この方法は常に効果がありましたが、次のことが最初に発生した場合は上記の指示に従うことはできません。
成功履歴
$ echo "cat file1.txt | paste -d, - - ## Step 3 " >> ~/globalLog.txt
ここに閉じ込められて
$ echo "cat file2.txt | sed 's/"//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
上記は引用符が正しく閉じられていないため、明白なエラーを生成します(コマンドを完了するために2番目のコマンドpropmt(私の考えでは?)に落ちる、つまり私の場合)。 sedコマンドはsed式に一重引用符()をPS2
使用しています。置き換えるには二重引用符()を>_
使用してください。'
"
この場合、コマンド全体をどのように含めますか?
答え1
引用のためにここで文書を完全に使用する必要はありません。一重引用符/二重引用符(たとえば、次の例の「EOF」)内にラベルを設定すると、テキスト内の変数とコマンドの評価が無効になります。
cat <<"EOF" >>~/globalLog.txt
cat file2.txt | sed 's/"//g' > file3.txt ## Step 2
EOF
答え2
いくつかのオプションがあり、各オプションはさまざまな状況で便利です。
文字列全体を二重引用符で囲み、内部のリテラル二重引用符をエスケープします(そのような項目が1つしかない場合は読みやすくなりますが、おそらく次のような結果になります)。フェンス):
echo "cat file2.txt | sed 's/\"//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
文字列の異なる部分に異なる引用符を使用します。
echo "cat file2.txt | sed 's/"'"'"//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
echo
複数のパラメータを処理する機能を使用してください。 1つだけで動作します。言葉結果には通常、各引数の間にスペースがあるため、問題のある文字が含まれているため、文字列では機能しません。代替例:echo 'foo"' "'bar"
印刷
foo" 'bar
複数の
echo -n
ステートメント(またはprintf %s
)を使用し、後でecho
なく次を使用します-n
。echo -n "cat file2.txt | sed '" >> ~/globalLog.txt echo -n 's/"' >> ~/globalLog.txt echo "//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
引用符をまったく使用しないで、すべての特殊文字をエスケープしてください。
echo cat\ file2.txt\ \ \|\ sed\ \'s/\"//g\'\ \>\ file3.txt\ \#\#\ Step\ 2\ >> ~/globalLog.txt
気づく一重引用符で囲まれた文字列では、一重引用符をエスケープできません。。
もし疑いがあれば、より多くの引用を使用™。
しかし、あなたの場合は、コマンドを実行する前にコマンドを記録したようです。すでに非常に良い解決策がありますコマンドをテキストとして使用。
答え3
シンプルで体系的で、POSIX規格に準拠した引用方法があります。どのひも。次の2つの規則を覚えておくだけです。
- 次のようにバックスラッシュを使用してアポストロフィ(一重引用符)を引用します。
\'
- 次のように、アポストロフィをアポストロフィで囲み、アポストロフィを除くすべての内容を引用します。
'printf "foo\n"'
これらの規則がどのように一緒に使用されるかを説明するために、次のようにdon't
単語を体系的に引用することができます。'don'\''t'
通常、文字列を参照するより読みやすい方法を見つけることができますが、状況が複雑になった場合に必要な参照を取得する信頼できる方法です。
質問に引用された文字列の形式は次のとおりです。
$ echo 'cat file2.txt | sed '\''s/"//g'\'' > file3.txt ## Step 2 ' >> ~/globalLog.txt
答え4
ただ
$ cat >> ~/globalLog.txt
<now type your command>
echo "cat file2.txt | sed 's/"//g' > file3.txt ## Step 2 "
<hit ctrl-d>