karobar
karobar

Reputation: 1320

How to assign to a bash variable an ssh remote command the pid while capturing its

Introduction

My question is very similar to this one, except that I'd like the output from the command to be redirected to a local file instead of a remote one.

The questioner was asking for a way to retrieve the process ID with a command similar to this one, where the mbuffer command wouldn't cause hanging:

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

The answerer responded with the following command to resolve the problem

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

Which is really helpful but still places files on the remote machine, not the local one.

My Attempts

The following is my attempt to capture a log of the output of $command:

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

Which sets PID to the process ID properly but doesn't produce a log.

Question

How can I capture a log on my local machine of the stdout of my $command while still assigning PID to the process ID of $command?

Upvotes: 1

Views: 173

Answers (1)

anishsane
anishsane

Reputation: 20980

Another approach:

{ 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");

Basically, the first line is PID & further lines are logs from the process.

Upvotes: 1

Related Questions