Вы делаете, если Ваш текущий каталог не находится в Вашем пути. Если Вы когда-нибудь входите в систему как корень или являетесь sudoer, я не рекомендую добавить текущий каталог к пути. Просто выносите./
При необходимости сделайте каталог в своем корневом каталоге названным bin
. Затем добавьте этот каталог к своему пути поиска. Это - хорошее место для помещения сценариев обслуживания общего назначения.
Короткий ответ:
ssh -t fs "stty isig intr ^N -echoctl ; trap '/bin/true' SIGINT; sleep 1000; echo f" > foo
и остановите программу CTRL+N.
Долгое объяснение:
stty
опция intr
изменить Ваш сервер или локальный символ прерывания для не столкновения друг с другом. В команде выше я изменил символ прерывания сервера на CTRL+N. Можно изменить локальный символ прерывания и оставить один сервера без любых изменений. stty -echoctl
.stty isig
SIGINT
сигнал trap '/bin/true' SIGINT
с пустым оператором. Без прерывания у Вас не будет stdout после сигнала SIGINT на Вашем конце.Я думаю, что Вы могли найти PID процесса, Вы работаете на сервере и отправляете сигнал с помощью другого ssh
команда (как это: ssh server "kill -2 PID"
).
Я использую этот метод для отправки сигналов реконфигурирования к приложениям, работающим на другой машине (мои приложения ловят SIGUSR1 и читают файл конфигурации). В моем выявлении заболевания PID легок, потому что у меня есть уникальные имена процесса, и я могу найти PID путем отправки a ps
запрос через ssh
.
Я перепробовал все решения, и это было лучшим:
ssh host "sleep 99 < <(cat; kill -INT 0)" <&1
----- Command.SH
#! /bin/sh
trap 'trap - EXIT; kill 0; exit' EXIT
(sleep 1000;echo f) &
read ans
----- на местном терминале
sleep 864000 | ssh -T server command.sh > foo
Решение превратилось в http://www.gnu.org/software/parallel/parallel_design.html#Remote-Ctrl-C-and-standard-error-stderr
$SIG{CHLD} = sub { $done = 1; };
$pid = fork;
unless($pid) {
# Make own process group to be able to kill HUP it later
setpgrp;
exec $ENV{SHELL}, "-c", ($bashfunc."@ARGV");
die "exec: $!\n";
}
do {
# Parent is not init (ppid=1), so sshd is alive
# Exponential sleep up to 1 sec
$s = $s < 1 ? 0.001 + $s * 1.03 : $s;
select(undef, undef, undef, $s);
} until ($done || getppid == 1);
# Kill HUP the process group if job not done
kill(SIGHUP, -${pid}) unless $done;
wait;
exit ($?&127 ? 128+($?&127) : 1+$?>>8)
seq 1000 | gzip | ssh -tt dell-test "zcat|bzip2" | bzcat > foo
не работает также. Чтобы иметь эту команду работают, мы должны удалить-tt
. Таким образом, выделение псевдотерминала, вероятно, берет некоторый вход от stdin – digital_infinity 06.06.2012, 15:23(sleep 1; seq 1000 ) | gzip | uuencode bin | ssh -tt dell-test "stty isig intr ^N -echoctl -echo ; trap '/bin/true' SIGINT; sleep 1; uudecode -o /dev/stdout | zcat |bzip2 | uuencode bin2 " | uudecode -o /dev/stdout | bzcat >foo
. Хотя символ прерывания не работает - нам нужен некоторый метод передачи для символа прерывания, в то время как stdin занят. – digital_infinity 06.06.2012, 16:27