Sudo

sudo -u username -s ‘cmd arg’ 返回命令未找到

  • January 14, 2017

我曾經執行命令:

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'參數分成兩部分,從而破壞命令。

引用自:https://unix.stackexchange.com/questions/24309