컬에서 루트로 bash로 프로세스 교체

컬에서 루트로 bash로 프로세스 교체

다음 명령을 사용하여 URL에서 루트로 스크립트를 실행하려고 합니다.

sudo bash <(curl -s http://copy.com/gLVZIqUubzcS/popcorn)

하지만 다음 오류가 발생합니다.

bash: /dev/fd/63: Aucun fichier ou dossier de ce type

"찾을 수 없음"을 의미하는 프랑스어입니다. 어떤 아이디어가 있나요?

추신: 저는 Ubuntu 12.04를 실행하고 있습니다.

답변1

sudostdin, stdout 및 stderr(참고자료 참조 man sudo)을 제외한 모든 열려 있는 파일 설명자를 닫으므로 프로세스 대체는 OOTB에 영향을 주지 않습니다 sudo.

비교하다

$ sudo bash <(echo echo foo)
bash: /dev/fd/63: No such file or directory

그리고

$ bash <(echo echo foo)
foo

이 문제를 해결할 수 있지만(또는 -C플래그를 사용하여 sudo) 원하는 작업을 수행하는 것은 일반적이지만 연습하는 것은 좋지 않습니다. 정말로 설치 프로그램을 실행하고 싶다면 root-shell을 받으십시오.첫 번째그런 다음 sudo.

답변2

이와 같은 프로세스 대체를 사용하지 마십시오. 실제로 어쨌든 거의 다음과 같습니다.

sudo sh <<CURL_SCRIPT
    $(curl -s http://copy.com/gLVZIqUubzcS/popcorn)
CURL_SCRIPT

또는:

curl -s http://copy.com/gLVZIqUubzcS/popcorn | sudo sh

실행하려는 스크립트가 bashisms위의 내용을 사용하지 않으면 작동하지 않습니다. -only 구문을 사용하는 경우 bash다음을 수행해야 합니다.

curl -s http://copy.com/gLVZIqUubzcS/popcorn | sudo . /dev/stdin

위의 방법이 작동하지 않는 것 같지만 이는 sudo쉘의 내장 기능을 싫어하기 때문일 것으로 예상됩니다..dot.

이렇게 하세요:

curl -s http://copy.com/gLVZIqUubzcS/popcorn | sudo ${0#-} /dev/stdin

간단히 다음을 수행할 수도 있습니다.

sudo sh -c "$(curl -s http://copy.com/gLVZIqUubzcS/popcorn)"

bash셸의 내장 기능을 사용할 수 있으면 실행 파일을 다시 호출할 필요가 없습니다.

관련 정보