Как передать вывод одной команды в качестве значения аргумента следующей команды - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу передать результат команды как значение аргумента следующей команды.Я знаю, что есть xargs и канал |, но это не очень помогает.

Я хочу запустить команду tail -f --pid=$REMOTE_PID logs, где REMOTE_PID - PID программы, которая выполняется на Удаленный сервер. Он записывает цифры от 1 до 30 в файл журнала и sleep(1).Поэтому я хочу, чтобы одновременно отображались цифры, поступающие из файла журнала на локальном компьютере. Все это делается в сценарии, а не вручную !!

Вот что я сделал до сих пор, но не могу получить правильный PID.В первой команде я ставлю &, чтобы освободить оболочку, чтобы я мог запустить следующую команду

ssh user@host 'nohup sh showdigits.sh' &
ssh user@host 'PID=`pgrep -f showdigits.sh` && tail --pid=$PID -f logs'

Эти команды работают, но я получаю несколько PID, прежде чем выбрать правильный:

tail: не может открыть '8087' для чтения: нет такого файла или каталога
tail: не может открыть '8109' для чтения: нет такого файла или каталога
==> logs <== <br>1
2
3
...

Я попробовал другой код:

ssh user@host 'nohup sh showdigits.sh' & 
ssh user@host "ps -ef | awk '/[s]howdigits.sh/{print $2}' > pid && tail --pid=`cat pid` -f logs"

Я получаю эту ошибку:
cat: pid: Нет такого файла или каталога
tail:: неверный PID

Я хочу иметь только один PID скрипта showdigits.sh и передать его в tail.Может быть, есть более простое решение?

Спасибо

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Ваша стратегия:

  1. Запустить процесс
  2. Отключить и забыть об этом
  3. Повторно подключиться и попытаться найти его
  4. Следуйте за ним

Вы можете упростить его, полностью исключив шаги 2 и 3:

ssh user@host '
  nohup sh showdigits.sh &
  tail --pid=$! -f logs
'

(Примечание: использование sh для запуска сценария является худшей практикой )

0 голосов
/ 19 апреля 2019

ваш grep соответствует более чем 1 результату. первое совпадение присваивается --pid =, а остальные интерпретируются как имена файлов.
Вы должны пропустить его через голову (или хвост) перед обработкой (в зависимости от того, какой пид вы хотите)
PID=$(pgrep -f showdigits.sh | head -n1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...