![: 인수는 프로세스 또는 작업 ID여야 합니다.](https://rvso.com/image/726405/%3A%20%EC%9D%B8%EC%88%98%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EB%98%90%EB%8A%94%20%EC%9E%91%EC%97%85%20ID%EC%97%AC%EC%95%BC%20%ED%95%A9%EB%8B%88%EB%8B%A4..png)
간단한 bash 스크립트(아래 killprocess.sh 참조)를 실행하여 둘 다 OS Ubuntu 18.04.1 LTS가 있는 원격 시스템의 특정 포트(예: 8080)에서 실행 중인 특정 프로세스/서비스를 종료하고 싶습니다.
스크립트를 실행하기 위해 다음과 같이 ssh(openssh)를 통해 연결을 설정했습니다. 연결도 성공적으로 설정되었습니다.
sshpass -p "password" ssh -n [email protected] -f "/bin/bash /home/killprocess.sh"
killprocess.sh의 내용은 다음과 같습니다.
processID=$(lsof -t -i:8080)
echo $processID
kill $processID
콘솔에 프로세스 ID를 올바르게 인쇄하더라도 프로세스를 종료할 수 없다는 오류 메시지가 아래에 표시됩니다.
: 인수는 프로세스 또는 작업 ID여야 합니다.
답변1
명령 을 실행하여 fromdos killprocess.sh
스크립트를 작동시키십시오(패키지에 포함되어 있음 tofrodos
).
이유는 다음과 같습니다.
오류 메시지는 줄 끝을 다르게 처리하는 Windows 텍스트 편집기에서 스크립트를 작성했음을 나타냅니다( \r\n
단순한 대신 줄 끝에 추가 \n
). 오류 메시지는 다음과 같아야 하기 때문에 의심됩니다.
bash: kill: meh: arguments must be process or job IDs
명령의 인수에 (캐리지 리턴) 문자 kill
가 포함된 경우에만 언급한 것과 같은 줄이 출력됩니다 . \r
따라서 오류 메시지가 인쇄되면 세 번째 콜론 이전에 커서가 줄의 시작 부분으로 다시 이동하고 오류 메시지의 나머지 부분이 지금까지 인쇄된 모든 내용을 덮어씁니다. 이는 또한 명령이 불평하는 이유를 설명합니다 . 프로세스 ID가 될 수 없는 kill
와 같은 것을 수신했습니다 .1234\r
아마도 이는 스크립트의 첫 번째 줄이 실제로
processID=$(lsof -t -i:8080)\r
\r
하지만 인쇄되지 않는 문자이기 때문에 물론 문자를 볼 수는 없습니다 . 두 번째 라인의 출력에서는 볼 수 없습니다. 라인을 출력하기 때문에 커서가 처음으로 다시 점프하지만 개행 문자로 인해 커서가 다음 라인으로 이동합니다.
그런데 bash 오류 메시지가 콜론으로 시작하면 unix/windows 줄 끝 문제가 항상 의심됩니다.