Сессия завершается, когда команда или оболочка на удаленных выходах машины и всем X11 и соединениях TCP были закрыты.
Вы уничтожили свою оболочку, но похоже, что некоторое приложение все еще имеет соединение, открытое по переданному порту (агент, X11 или передача, настроенная с -D
, -L
, -R
или их ~/.ssh/config
эквивалентный).
Если Вы не знаете, какая программа использует передачу, использовать lsof -p $pid
где $pid
идентификатор процесса ssh клиента (на клиенте) или sshd
процесс, который был родителем оболочки (на сервере) для обнаружения, на каких портах это имеет открытые соединения. Затем используйте lsof -i -n
или netstat -pnt
и поиск обрабатывает, которые имеют соединения, открытые на этих портах.
set -e
?
set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
Set or unset values of shell options and positional parameters.
Change the value of shell attributes and positional parameters, or
display the names and values of shell variables.
Options:
-a Mark variables which are modified or created for export.
-b Notify of job termination immediately.
-e Exit immediately if a command exits with a non-zero status.
...
Вы могли бы присоединиться ко всем командам с &&
и используйте || exit $?
в самом конце блока. Например:
#!/usr/bin/ksh
ls ~/folder &&
cp -Rp ~/folder ~/new_folder &&
rm ~/folder/file03.txt &&
echo "This will be skipped..." ||
exit $?
если существует нет ~/folder/file03.txt
файл, последнее echo
команда будет пропущена. Необходимо получить что-то вроде этого:
$ ./script.ksh
file01.txt file02.txt
rm: cannot remove /export/home/kkorzeni/folder/file03.txt: No such file or directory
$ echo $?
1
С наилучшими пожеланиями, Krzysztof
exit
один будет вести себя тот же путь как exit $?
делает
– Tobias Kienzler
18.10.2012, 08:35
Вы можете определить функцию перехвата для перехвата любой ошибки, возникающей в сценарии.
#!/usr/bin/ksh
trap errtrap
function errtrap {
es=$?
echo "`date` The script failed with exit status $es " | $log
}
Остальная часть сценария следует.
TRAP перехватит любую ошибку по любой команде и вызовет функцию errtrap
. Для лучшего использования вы можете сделать функцию errtrap
универсальной и вызывать ее в любом создаваемом вами скрипте.
set -e
сценарий для сбоя, когда коды возврата не тестируются. Точное значение протестированных не легко указать, но основная идея - этоfailingcmd || nonfailing
не сделает целый сбой сценария. – dubiousjim 17.10.2012, 21:25