: аргументы должны быть идентификаторами процессов или заданий

: аргументы должны быть идентификаторами процессов или заданий

Я хочу запустить простой bash-скрипт (далее именуемый killprocess.sh), чтобы завершить определенный процесс/службу, работающую на определенном порту (например, 8080) на удаленной машине, на обеих из которых установлена ​​ОС Ubuntu 18.04.1 LTS.

Я установил соединение по 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

Хотя он правильно выводит идентификатор процесса на консоль, ниже выдается сообщение об ошибке, подразумевающее, что завершить процесс невозможно.

: аргументы должны быть идентификаторами процессов или заданий

решение1

Выполните fromdos killprocess.shкоманду, чтобы ваш скрипт заработал (она включена в tofrodosпакет).

И вот почему.

Сообщение об ошибке предполагает, что вы написали свой скрипт в текстовом редакторе Windows, который обрабатывает окончания строк по-другому (добавляя \r\nв конец строки вместо просто \n). Сообщение об ошибке подозрительно, потому что оно должно быть чем-то вроде

bash: kill: meh: arguments must be process or job IDs

Он вывел бы строку, как вы упомянули, только если аргумент команды killсодержал \rсимвол (возврат каретки). Поэтому, когда печатается сообщение об ошибке, перед третьим двоеточием курсор возвращается к началу строки, а остальная часть сообщения об ошибке перезаписывает все, что было напечатано до этого. Это также объясняет, почему команда killжаловалась: она получила что-то вроде 1234\r, что не может быть идентификатором процесса.

Скорее всего, это потому, что первая строка вашего скрипта на самом деле

processID=$(lsof -t -i:8080)\r

но вы, конечно, не можете увидеть \rсимвол, так как он непечатаемый. Вы не можете увидеть его на выходе второй строки, так как она выводит строку, курсор возвращается в начало, но затем символ новой строки заставляет курсор перейти на следующую строку.

Кстати, проблема с окончанием строки в Unix/Windows всегда возникает, если сообщение об ошибке Bash начинается с двоеточия.

Связанный контент