![다른 결과로 터미널과 스크립트에서 동일한 명령을 단계별로 실행 [중복]](https://linux55.com/image/144765/%EB%8B%A4%EB%A5%B8%20%EA%B2%B0%EA%B3%BC%EB%A1%9C%20%ED%84%B0%EB%AF%B8%EB%84%90%EA%B3%BC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EB%8B%A8%EA%B3%84%EB%B3%84%EB%A1%9C%20%EC%8B%A4%ED%96%89%20%5B%EC%A4%91%EB%B3%B5%5D.png)
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
.
engrampa
3개의 오픈 프로세스 인스턴스가 있다고 가정해 보겠습니다 .
터미널에서 위의 명령을 단계별로 실행하면 원하는 결과를 얻을 수 있습니다.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 -1
Christopher님의 의견에 감사드립니다.