在 sudo 上使用“-c”标志时出现意外的 EOF

在 sudo 上使用“-c”标志时出现意外的 EOF

我一直在尝试自己拿起 sudo ,并且已经在这个附带问题上停留了好几天了。

运行下面的命令时,我能够使用 file1.txt 中的两个属性(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

相关内容