다음 명령을 사용하여 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
sudo
stdin, 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
셸의 내장 기능을 사용할 수 있으면 실행 파일을 다시 호출할 필요가 없습니다.