После маленького обсуждения Usenet я использую следующее в качестве обходного решения для flock -n lockfile -c command
:
#! /bin/bash
if [ $# != 4 -o "$1" = '-h' ] ; then
echo "Usage: flock -n lockfile -c command" >&2
exit 1
fi
lockfile=$2
command=$4
set -o noclobber
if 2>/dev/null : > "$lockfile" ; then
trap 'rm -f "$lockfile"' EXIT
$BASH -c "$command"
else
exit 1
fi
Попытайтесь использовать ssh
escape-последовательность завершения соединения.
В ssh
сессия, войти ~.
(точка тильды). Вы не будете видеть символов, когда Вы введете их, но сессия сразу завершится.
$ ~.
$ Connection to me.myhost.com closed.
От man 1 ssh
The supported escapes (assuming the default ‘~’) are:
~. Disconnect.
~^Z Background ssh.
~# List forwarded connections.
~& Background ssh at logout when waiting for forwarded
connection / X11 sessions to terminate.
~? Display a list of escape characters.
~B Send a BREAK to the remote system (only useful for SSH protocol
version 2 and if the peer supports it).
~C Open command line. Currently this allows the addition of port
forwardings using the -L, -R and -D options (see above). It also
allows the cancellation of existing remote port-forwardings using
-KR[bind_address:]port. !command allows the user to execute a
local command if the PermitLocalCommand option is enabled in
ssh_config(5). Basic help is available, using the -h option.
~R Request rekeying of the connection (only useful for SSH protocol
version 2 and if the peer supports it).
Просто нажмите CtrlD, и он зарегистрирует Вас там для хранения ctrl и нажмет "d", пока окно не исчезнет.
EOT
. И даже bash
проигнорирует его посреди командной строки. Попробуйте его сами: введите одну букву и попытку Ctrl-D
.
– Alexios
30.06.2012, 15:49
Просто близкий PuTTY. (Alt+F4 по умолчанию IIRC.)
Иначе должен сделать function
для ssh
:
function ssh(){ /usr/bin/ssh $@ ; exit ; }
К сожалению, это также будет всегда закрывать соединение и выход из системы от консоли после окончания работы над удаленной системой.
Обратите внимание на то, что Вы должны сделать такую функцию во всех своих серверах, иначе этот взлом не будет работать. Btw можно всегда помещать функцию в ~/.bashrc или ~/.whatever_shell_you_use_rc.
Это смотрит немного грязный взлом по сравнению с путем uther.
function
не POSIX - просто удаляют ключевое слово, и необходимо заключить в кавычки $@
правильно, или Ваши аргументы будут переданы после слова, разделяющего (плохо).
– Chris Down
03.11.2012, 00:15
Или Вы могли использовать exec
заменять Ваш процесс оболочки ssh
при переходе к другому хосту:
SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.
5 уровней глубоко не симпатичны, так как трафик пройдет через все другие серверы. Из-за этого я не рекомендую просто уничтожить PuTTY или ssh (~)., с тех пор (в зависимости от того, что Вы делаете) это могло привести к осиротевшим процессам на серверах.
Лучше попытаться быть менее "ленивым". Щелкните правой кнопкой по строке заголовка шпаклевок, делает открытие новой сессии быстрым. Если Вы имеете сервер "по умолчанию" и принимаете 1, спрыгивают с этого, функция "Duplicate Session" очень полезна. Особенно при использовании pubkey аутентификации.
Если Вы не возражаете делать небольшие сценарии, можно сделать это.
Сценарий: myssh.sh
#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
exit 5
fi
Звоните через точечную команду:
$ . myssh user@server.com
Если Вы хотите выйти из одного уровня:
$ exit
Если Вы хотите выйти из всех:
$ exit 5
~.
в псевдоним или функцию? Только дать ему легкое для запоминания имени какexitall
. Теперь я прошу слишком очень :). Я попробовал несколько вещей в~/.bashrc
но доберитесь-bash: ~.: command not found
. Я предполагаю, что удар рассматривает его как строку и не escape-последовательность, прибывающую непосредственно из клавиатуры. – Banjer 26.06.2012, 20:36ctrl+d
решение также, но это отвечает на мой вопрос более непосредственно. Спасибо все. – Banjer 26.06.2012, 21:51~.
, это обрабатываетсяssh
самостоятельно. – Gilles 'SO- stop being evil' 27.06.2012, 01:21ssh
клиенту нужна эта техника, потому что это - CLI. PuTTY является приложением GUI и существуют намного более удобные для пользователя способы сделать этот материал на GUI. – Alexios 30.06.2012, 16:45