Попытка работать с раздражающей проблемой здесь, которая, безусловно, разрешима, если бы я мог просто найти правильные последовательности, чтобы убежать должным образом.Невозможно получить bash escapes для работы с использованием ssh, nohup & netcat
Сценарий: У меня есть сценарий, который используется с zfs send/recv и для получения наилучшей производительности в локальных сетях, я хочу, чтобы скрипт подключался к принимающей машине, породил netcat-приемник в zfs recv, который я буду затем отправьте на исходный скрипт.
Я построить команду, аналогичную:
rcmd="nohup nc -l -p $NCPORT|zfs recv $destfs > /dev/null 2>&1"
И запустить его:
ssh -f $RHOST "${rcmd}"
А затем запустить поток посыла с:
zfs send $locallastsnap | nc $RHOST $NCPORT
На приемном конце, Я вижу, что он порождает два процесса
bash -c nohup nc -l -p 12739|zfs recv backup/data
nc -l -p 12739
Итак, где-то вдоль линии, глобус теряет соединение с трубой с командой recv и перенаправление nohup stdout/err.
Я не верю, что вы должны увидеть переназначения в 'ps'/и т.д.. вывод. Они не являются частью исполняемой команды, они являются частью вызова оболочки. –
ОК - это объясняет отсутствие 2> и 1, но я все еще остаюсь на отдыхе. Я пробовал множество различных механизмов экранирования без каких-либо успехов. –
Я не вижу ничего явно неправильного с опубликованным кодом. Переадресации должны появиться в строке 'ps' для bash, так как они являются частью строки с кавычками, переданной в bash в качестве аргумента. ps может усекать командную строку в своем выходе. Рассмотрим проверку '/ proc//cmdline' для PID процесса bash, чтобы увидеть, что было фактически передано в bash. –
Kenster