$PATH에서 sudo 명령을 사용할 수 있는지 어떻게 알 수 있나요?

$PATH에서 sudo 명령을 사용할 수 있는지 어떻게 알 수 있나요?

최근 서버에 유틸리티를 설치했는데 에서 구매가 이루어진 것을 확인했습니다 sudo. 즉, foo예상대로 구매가 실행되었습니다 .sudo foosudo: foo: command not found

나는 이것을 .sudo 링크와 함께 명령 /usr/local/bin과 sudo를 사용하여 추적했습니다. 설치 스크립트를 수정하여 설치했는데 모든 것이 순조롭게 진행되었습니다.PATH/usr/bin/usr/bin

이 상황을 감지하고 나중에 뭔가 변경되어 어떤 이유로든 명령을 사용할 수 없는 경우 오류를 보고하도록 서버 설정 스크립트를 변경하고 싶습니다. 나 이거부터 일하고 있어StackOverflow 질문그리고 그 대답은 다음과 같은 테스트를 사용하는 것을 제안합니다.

command -v foo >/dev/null 2>&1 || { echo "I require foo but it's not installed.  Aborting." >&2; exit 1; }

그러나 이는 예상한 것과 다릅니다 sudo.

$ command -v foo
/usr/bin/foo
$ sudo command -v foo
sudo: command: command not found
$ sudo type foo
sudo: type: command not found
$ sudo hash -v foo
sudo: hash: command not found
$ sudo foo
   ...executes normally...
$ sudo bash
# command -v foo
/usr/bin/foo
# sudo command -v foo
sudo: command: command not found
# foo
   ...executes normally...
# sudo foo
   ...executes normally...

이상하게도 sudo which foo명령이 발견되었습니다 /usr/bin/. 명령을 실행하면 sudo which barsudo 경로에 실제로 명령이 포함되어 있다는 메시지가 표시됩니다. 이는 하위 명령을 시작할 때를 의미합니다 which: no foo in (/sbin:/bin:/usr/sbin:/usr/bin)./usr/bin

무슨 일이야?
명령을 호출할 수 있는지 확인하기 위해 어떤 테스트를 실행할 수 있습니까?sudo 아니요명령을 내리시겠습니까? (또한 which연결된 질문의 일부 의견과 답변에 따라 전화하지 않고 경고합니다. 그렇지 않으면 문제가 없습니다...)

답변1

sudo바이너리를 실행하는 데 사용되므로 쉘이 실행되지 않으면 쉘 내장 기능을 사용할 수 없습니다. bash -cbash에게 다음 인수를 해석하도록 지시하여 실행에 문자열을 해석 하고 올바른 내장 함수를 호출하도록 sudo bash -c "command -V <exe>"지시합니다 .sudobashcommand -V <exe>

관련 정보