Вот реализация в ударе с помощью расширения фигурной скобки:
the_file=foo.mp3
for file in /downloads/media/{tv,movie,music}/"$the_file"; do
if [[ -e $file ]]; then
printf '%s found in %s:\n' "$the_file" "${file%/*}"
fi
done
Технически, когда Вы ssh
к "othermachine" Вы являетесь удаленно рабочими ncat localhost 10000
на "othermachine". Нет никакой передачи по каналу, продолжающейся здесь.
Относительно чего-то еще "слушание", которому я не верю, существует что-либо. Скорее Вы работаете ncat localhost 10000
при попытке соединиться с чем-то, это слушает на порте 10000 и там нет ничего.
$ ncat localhost 10000
Ncat: Connection refused.
Если Вы говорите ncat
для слушания затем, это останется открытым.
$ ncat localhost -l 10000
При помещении этого вместе работает команда, как, с добавлением -l
переключатель.
$ ssh othermachine ncat localhost -l 10000
После выполнения Ctrl+C ncat localhost -l 10000
также продолжает работать на удаленном сервере для меня также.
Для остановки этого поведения, Вы могли перенести вызов к "othermachine" в оболочке, такой как sh
.
$ ssh othermachine -t 'sh -c "ncat localhost -l 10000"'
...stays up...
Теперь в другой оболочке, если я вхожу в "othermachine" и подтверждаю, что это работает:
$ pgrep -l ncat
8479 ncat
Если я Ctrl+C оригинал ssh
соединение ncat
остановки, работающие также.
$ ssh othermachine -t 'sh -c "ncat localhost -l 10000"'
Ctrl + C
Shared connection to othermachine closed.
Подтверждение это пошло:
$ pgrep -l ncat
$
Основная часть в этой установке -t
переключатель. Это вынуждает соединение установить pseudo-tty (ptty) терминал как часть соединения.
выборка из ssh страницы справочника
-t Force pseudo-tty allocation. This can be used to execute arbitrary
screen-based programs on a remote machine, which can be very useful,
e.g. when implementing menu services. Multiple -t options force tty
allocation, even if ssh has no local tty.
Этот ptty позволяет нам отправлять Ctrl+C до ncat
который затем завершается, приводя к закрытию ssh
соединение полностью.
Бросание беглого взгляда на man ssh
If command is specified, it is executed on the remote host instead of a login shell.
Это могло быть причиной, почему она продолжает бегать за a SIGTERM/SIGKILL
. Если Вы захотите вызвать вход в систему оболочки, то необходимо будет сделать что-то как:
ssh othermachine -t 'bash -l -c "ncat localhost 10000"'
ssh othermachine -t 'bash -l -c "iperf -s "'
) и это работало. Не звоня явно колотят, это будет продолжать управлять ;)
–
12.12.2013, 14:54
работы ответа nwildner, но единственная вещь, я волнуюсь по поводу этого, являются переключателем-t, присваивает pseudo-tty, и это могло, возможно, привести к терминальным escape-последовательностям, не проходящим чисто? В случае передачи с ncat
, лучшее решение для моего случая состоит в том, чтобы использовать
ssh othermachine -W localhost:10000
который является собственным способом ssh передать соединение.
Другой ответ на этот вопрос должен использовать nc
вместо ncat
. Это обычно имеет ту же функциональность. Если stdin ncat закрывается, ncat не закрывает свой конец соединения TCP, в то время как nc делает.