如何在捕获它时向pash变量分配一个ssh远程命令pid

时间:2016-05-05 01:01:05

标签: linux bash shell ssh

简介

我的问题与this one非常相似,只是我希望将命令的输出重定向到本地文件而不是远程文件。

提问者要求使用类似于此命令的命令来检索进程ID,其中mbuffer命令不会导致挂起:

read -r pid < <(ssh 10.10.10.46 "mbuffer -4 -v 0 -q -I 8023 > /tmp/mtest & echo $!"); echo $pid

回答者使用以下命令回复以解决问题

read -r pid \
 < <(ssh 10.10.10.46 'nohup mbuffer >/tmp/mtest </dev/null 2>/tmp/mtest.err & echo $!')

这确实很有帮助,但仍将文件放在远程计算机上,而不是本地文件。

我的尝试

以下是我尝试捕获$ command输出的日志:

read -r PID < <(ssh $remote 'nohup $command >&2 & echo $!' 2> $log)

将PID设置为正确的进程ID,但不生成日志。

问题

如何在我$command的stdout的本地计算机上捕获日志,同时仍将PID分配给进程ID $command

1 个答案:

答案 0 :(得分:1)

另一种方法:

{ read -r pid;
  # Do whatever you want with $pid of the process on remote machine
  cat > my_local_system_log_file
} <(ssh 10.10.10.46 "mkfifo /tmp/mtest; mbuffer -4 -v 0 -q -I 8023 &> /tmp/mtest & echo $!; cat /tmp/mtest");

基本上,第一行是PID&amp;更多行是来自该过程的日志。