다른 결과로 터미널과 스크립트에서 동일한 명령을 단계별로 실행 [중복]

다른 결과로 터미널과 스크립트에서 동일한 명령을 단계별로 실행 [중복]
pid=$(pgrep 'engrampa') #Get the PID of the engrampa processes .
killpid=$(echo $pid | head -1) #Get only the first line of the $pid variable and put into a new variable called $killpid.
kill $killpid

변수의 첫 번째 행만 유지하고 싶습니다 $pid.

engrampa3개의 오픈 프로세스 인스턴스가 있다고 가정해 보겠습니다 .

터미널에서 위의 명령을 단계별로 실행하면 원하는 결과를 얻을 수 있습니다.2590

https://i.stack.imgur.com/L3U2g.jpg

스크립트에서 이러한 exaclty 명령을 실행하면 다음과 같은 결과가 나타납니다.2590 18425 18449

https://i.stack.imgur.com/RuGX9.jpg

왜 이런 일이 발생합니까?

답변1

편집: Steeldriver의 의견 덕분에 내 문제가 확인되었습니다.

뛰어 echo $pid | head -1들어 bash아무것도 하지 마세요. 쉘에서 동일한 명령을 실행하면 zsh원하는 결과를 얻을 수 있습니다.

bash 쉘 출력 ->2590 18425 18449

zsh 쉘 출력->2590

즉, 스크립트의 셸을 #!/bin/zsh.

편집: 또 다른 더 적합한 솔루션은 두 쉘 모두에서 작동하는 것 echo $pid | awk '{print $1}'입니다 . echo $pid | head -1Christopher님의 의견에 감사드립니다.

관련 정보