Недавно я столкнулся с немного странным поведением при запуске команд над ssh. Мне было бы интересно услышать любые объяснения поведения ниже.
Запуск ssh localhost 'touch foobar &'
создает файл с именем foobar
, как и ожидалось:
[[email protected] ~]$ ssh localhost 'touch foobar &'
[[email protected] ~]$ ls foobar
foobar
Однако выполнение одной и той же команды, но с параметром -t
для принудительного выделения псевдо-tty не создает foobar
:
[[email protected] ~]$ ssh -t localhost 'touch foobar &'
Connection to localhost closed.
[[email protected] ~]$ echo $?
0
[[email protected] ~]$ ls foobar
ls: cannot access foobar: No such file or directory
Моя нынешняя теория состоит в том, что, поскольку процесс касания подкрепляется информацией, псевдо-tty выделяется и нераспределяется до того, как процесс имеет шанс запустить. Конечно, добавление одного второго сна позволяет приступить к работе, как ожидалось:
[[email protected] ~]$ ssh -t localhost 'touch foobar & sleep 1'
Connection to localhost closed.
[[email protected] ~]$ ls foobar
foobar
Если у кого-то есть окончательное объяснение, мне было бы очень интересно его услышать. Спасибо.