sudoで「-c」フラグを使用すると、予期しないEOFが発生します。

sudoで「-c」フラグを使用すると、予期しないEOFが発生します。

私は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

関連情報