sudo -u username -s“cmd arg”는 명령을 찾을 수 없음을 반환합니다


10

명령을 실행하는 데 사용했습니다.

sudo -u elasticsearch -s "ulimit -Hn"

그리고 Ubuntu 11.10에서 시도 할 때까지 사용자 elasticsearch에서 볼 수 있듯이 ulimit -Hn 값을 반환했습니다. 거기 반환합니다 :

/bin/bash: ulimit -Hn: command not found

몇 가지 다른 명령을 시도했는데 인수를 사용할 때 항상 "명령을 찾을 수 없습니다"라는 메시지가 나타납니다.

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found

통해 인수가 필요한 명령을 어떻게 실행할 수 sudo있습니까?


-s? 일반 쉘을 유지하고 명령을 실행하는 데 사용하십시오. 와 같은 sudo -u elasticsearch ls all.sh. elasticsearch기본 쉘을 사용할 수없는 경우 실제 명령 -s bash 앞에 사용 하십시오.
glglgl

답변:


16

큰 따옴표를 제거해야합니다. "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'인수를 두 개로 나누고 명령을 깨뜨 렸습니다.


명령이 분할 되지 않는 위치는 어디에서 테스트 했 습니까?
Zarathustra

@Zarathustra 5 년 전인 것입니다. sudo 소스 코드 히스토리를 파는 것이 좋습니다. 동작이 변경된 시점을 찾을 수 있어야합니다.
camh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.