Sudo
sudo -u username -s ‘cmd arg’ 返回命令未找到
我曾經執行命令:
sudo -u elasticsearch -s "ulimit -Hn"
它返回使用者elasticsearch看到的ulimit -Hn的值,直到我在Ubuntu 11.10上嘗試過。它在那裡返回:
/bin/bash: ulimit -Hn: command not found
我嘗試了一些不同的命令,當我使用參數時,我總是得到“找不到命令”:
$ sudo -u elasticsearch -s "ls all.sh" /bin/bash: ls all.sh: command not found
關於如何執行需要參數的命令的任何想法
sudo
?
您需要刪除雙引號。它試圖將名為“ulimit -Hn”的命令作為單個命令、空格和所有命令執行。
-s
需要是命令行的最後一個sudo
選項sudo
,後面的所有參數都傳遞$SHELL -c
給執行。sudo -u elasticsearch -s ulimit -Hn
我猜
-s
處理的方式已經改變,因為目前的方式允許您通過$SHELL
在命令行上轉義它們來傳遞帶空格的參數:$ touch '/tmp/foo bar' $ sudo -s rm '/tmp/foo bar'
舊的參數處理方法會將該
'/tmp/foo bar'
參數分成兩部分,從而破壞命令。