2015-01-14 3 views
3

Попытка работать с раздражающей проблемой здесь, которая, безусловно, разрешима, если бы я мог просто найти правильные последовательности, чтобы убежать должным образом.Невозможно получить 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.

+0

Я не верю, что вы должны увидеть переназначения в 'ps'/и т.д.. вывод. Они не являются частью исполняемой команды, они являются частью вызова оболочки. –

+0

ОК - это объясняет отсутствие 2> и 1, но я все еще остаюсь на отдыхе. Я пробовал множество различных механизмов экранирования без каких-либо успехов. –

+0

Я не вижу ничего явно неправильного с опубликованным кодом. Переадресации должны появиться в строке 'ps' для bash, так как они являются частью строки с кавычками, переданной в bash в качестве аргумента. ps может усекать командную строку в своем выходе. Рассмотрим проверку '/ proc//cmdline' для PID процесса bash, чтобы увидеть, что было фактически передано в bash. – Kenster

ответ

0

Я думаю, что у вас может возникнуть проблема с вашим конвейером. Вы видите эту команду на удаленной машине:

bash -c nohup nc -l -p 12739|zfs recv backup/data 

Но вы хотите сказать:

bash -c "nohup nc -l -p 12739|zfs recv backup/data" 

В противном случае, я думаю, что ваш трубопровод будет ждать Баш, чтобы выйти и трубу выхода в ZFS.

Так, может быть, попробуйте добавить эти цитаты себя:

rcmd="\"nohup nc -l -p $NCPORT|zfs recv $destfs > /dev/null 2>&1\"" 
+0

Я так не думаю. Если '-c' не видел всю строку, вы бы не увидели все это в списке процессов (вы просто увидите часть перед трубой). К сожалению, это выглядит запутанным, но это побочный эффект, когда цитирование удаляется. –