私はsudoを直接選択しようとしてきましたが、数日間この側面の問題に閉じ込められていました。
以下のコマンドを実行すると、file1.txt の 2 つの属性 (D,44.... および E,44......) を「TESTINFORMATION」の前に別々の行として使用して、正しい変更情報を生成できます。
sed '/TESTINFORMATION/i\attribute="D,44444,44444" \nattribute="E,44444,44444"' file.txt >> file1.txt
ただし、sudoに渡された「c」パラメータを使用してコマンドを実行しようとすると、予期しないEOFが発生し続けます。
sudo -S su - root -c 'sed \'/TESTINFORMATION/i\attribute="D,44444,44444" \nattribute="E,44444,44444"\' file.txt >> file1.txt'
ペアのアポストロフィとエスケープ文字を見てみましたが、それでもエラーは表示されません。
EOF問題を解決するためのベストプラクティスは何ですか?
解決策:DopeGhotiのソリューションとSteeldriverのソリューションを試してみましたが、どちらも効果がありました。考えられる解決策の例は次のとおりです。
sudo -S su - root -c '\''sed \'/TESTINFORMATION/i\attribute="D,44444,44444" \nattribute="E,44444,44444"\'\'' file.txt >> file1.txt'
大切な時間をいただきありがとうございます :)
答え1
問題は、「強い引用符」の中に含めたい「強い引用符」文字列があることです。これはうまくいきません。醜い答えは内部引用符を避けることです。おそらくよりよく管理しやすい答えは、語彙的に複雑なsed
コマンドを取得してスクリプトに入れてから、例をsudo
使用してスクリプト自体を実行することですsudo /path/to/sed_script.sh
。
sudo
実行に使用するsu -S su - root -c 'somecommand'
もの非常にただバイパスして走ってくださいsudo somecommand
。