: 인수는 프로세스 또는 작업 ID여야 합니다.

: 인수는 프로세스 또는 작업 ID여야 합니다.

간단한 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 줄 끝 문제가 항상 의심됩니다.

관련 정보