qre*_*est 38 unix linux bash scripting
我正在编写一个需要sudo多个命令的bash脚本.我可以做这个:
( whoami ; whoami )
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
sudo ( whoami ; whoami )
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
Gil*_*il' 59
在里面运行一个shell sudo
:
sudo bash -c 'whoami; whoami'
您可以'
在单引号内使用除自身之外的任何字符.如果你真的想在该命令中使用单引号,请使用'\''
(技术上是:end single-quote literal,literal '
character,start single-quoted literal;但实际上这是一种在单引号中注入单引号的方法文字字符串).
Max*_*kin 55
您可以使用here文档将命令作为标准输入传递给sudo'ed bash :
sudo bash <<"EOF"
whoami
id
EOF
Run Code Online (Sandbox Code Playgroud)
这样就没有必要摆弄正确的引用,特别是如果你有多个级别,例如:
sudo bash <<"EOF"
whoami
echo $USER ~
sudo -u apache bash <<"DOF"
whoami
echo $USER ~
DOF
EOF
Run Code Online (Sandbox Code Playgroud)
生产:
root
root /root
apache
apache /usr/share/httpd
Run Code Online (Sandbox Code Playgroud)
(注意,你不能缩进内部终结符 - 它必须单独在它的行上.如果你想在这里使用缩进文档,你可以使用<<-
而不是<<
,但是你必须缩进标签,而不是空格.)
小智 8
如果您想从编辑器中获得语法突出显示,而不是在代码周围使用引号,并有适当的缩进,您可以在函数中编写命令并使用以下命令将其发送到 bash declare
:
function run_as_root() {
whoami
id
echo $USER
}
sudo bash -c "$(declare -f run_as_root); run_as_root"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32452 次 |
最近记录: |