我一直在尝试自己拿起 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
。