2014-10-06 2 views
3

이 질문은 다음과 유사합니다. https://serverfault.com/questions/342697/prevent-sudo-apt-get-etc-from-swallowing-pasted-input-to-stdin하지만 대답은 만족스럽지 않습니다. (bash 스크립트의 각 행에 &&을 추가하는 것은 우아하지 않습니다). 일부 사용자가 붙여 넣기/실행할 수있는 이유를 설명하지 않습니다. 여러 개의 후속 apt-get install -y 명령과 다른 명령은 stdout이 다음 명령에 의해 부 풀리기 때문에 실패 할 수 있습니다.Bash 스크립트가 실행되는 대신 인쇄됩니다.

sudo apt-get install -y graphicsmagick 
sudo apt-get install -y libgraphicsmagick++1-dev 
... 

그것은 두 선 또는 sudo apt-get install 물건을 더 많이 가질 수 있습니다

나는 스크립트 my_script.sh 있습니다. 라이브러리 (graphicsmagick 등)는 중요하지 않으며 모든 라이브러리가 될 수 있습니다.

나는이 스크립트를 복사하고이 내용을 비난하거나이처럼 실행의 붙여 넣을 때 :

cat my_script.sh | sudo -i bash 

다음 몇 가지 이유로 첫 번째 라인 (graphicsmagick) 실행 얻고 나머지 단지에 인쇄를위한 콘솔. sudo apt-get install -y으로 만 발생하며이 명령을 포함하지 않는 다른 스크립트는 정상적으로 작동합니다.

cat my_script.sh | sudo -i sh 

당신이 이런 일이 발생하는 이유를 설명 할 수 : 나는 bashsh에 (dash이됩니다) 내가 기대 얻을 동작을 변경하는 경우

?

  1. 가 왜 이런 식으로 일을 :

    이 질문/의견을 피해주십시오 수, 응답 할 때? 배시에

  2. 배관
  3. 일부 다른 측면
  4. 난 그냥 내가 기대하고 sh이처럼 bash가 작동하지 않는 이유를 알고 싶어

안전하거나 hackish없는 안전하지 않습니다.

추신.

[email protected]:/tmp$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash 
+0

'sh'가'dash'라고 어떻게 알 수 있습니까? 'ls -l/bin/sh'가 알려줄 것입니다. 어떤 OS를 사용하고 있습니까? –

+0

@KeithThompson - 예, 대시입니다, 우분투 14.04, quiestion이 편집되었습니다. – mnowotka

+0

아마도 당신의 문제와 관련이 없지만, 당신의 스크립트와'bash' 또는'sh'를 호출 할 때'sudo'를 사용할 필요는 없습니다. –

답변

1

강타와 -i 플래그를 사용할 때 대시는 단순히 다른 행동 : 당신이 여기에서 볼 수 있듯이 나는 우분투 14.04 사용하고, SH는 대시입니다. stdin이 터미널이 아닌 경우에도 Bash는 항상 대화식 모드로 이동합니다. 대시는 -i 플래그가있는 경우에도 대화식 모드로 들어 가지 않습니다.

관련 문제