Единственный IP-адрес, на котором может работать процесс на локальном компьютере, — это 127.0.0.1
, lo
, петлевое устройство, известное как localhost
. Порты могут быть перенаправлены на общедоступный IP-адрес с сетевыми конфигурациями.
Я обычно использую sudo lsof -i :
, чтобы узнать, что вызывает EADDRINUSE , потому что так быстрее печатать.
sudo lsof -i :443 | tail -1 | cut -f2 -d' ' | xargs kill
Убьет процесс, работающий на порту 443, если ваш lsof
выдает вывод, подобный:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 32233 cat 4u IPv4 24123106 0t0 TCP *:http-alt (LISTEN)
Изlsof --help
:
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
Для отладки сценариев можно использовать отладчик Bash .
Более простой вариант — использовать ловушку DEBUG
:
#!/bin/bash
function prompt {
if [[ -n "$BASH_COMMAND" ]]; then
echo About to run \'$BASH_COMMAND\'
read -p 'Continue [Y/n]?' CONT
if [[ "$CONT" = "n" || "$CONT" = "N" ]]; then
echo Exiting prematurely
exit 1
fi
fi
}
trap prompt DEBUG
echo Hello
ls
sleep 10
Это будет запускать функцию prompt
перед каждой командой после установки прерывания, предоставляя вам возможность продолжить или прервать. Строки, начинающиеся с echo Hello
, будут заменены любым вашим сценарием, или, что еще лучше, вы можете сохранить функцию и команду trap
в отдельном скриптлете, который вы source
впишете в скрипт, который хотите отладить.
Есть некоторые тонкости, связанные с ловушкой DEBUG
; во-первых, он не запускает внутренние функции, если только он не был повторно -установлен внутри функции (, поэтому вы можете пропустить функции, которые вы не хотите отлаживать, включая саму функцию prompt
, но вам нужно не забыть запустить trap
внутри функций, которые вы делаете хотите отлаживать ).
Поведение трассировки можно включать и отключать по желанию в вашем скрипте, соответственно, добавляя
trap prompt DEBUG
и
trap "" DEBUG
в зависимости от обстоятельств.