Shell脚本在远程执行命令然后退出shell以在本地执行下一个操作

时间:2016-02-20 13:47:48

标签: linux bash shell

我正在编写一个shell脚本来执行远程的一系列操作。然后我想回到本地并执行下一系列动作。当我使用exit时,我将退出shell脚本而不是退出远程计算机。

set -x

ssh $1

cd /var/log/sysstat/

for (( i = 11; i <= 19; i++ ))

do

 sar -f $i >> /home/sirish.aditya/cpu_11-19.csv

 sar -f $i -r >> /home/sirish.aditya/mem_11-19.csv

done

exit 

mkdir /Users/sirish.aditya/workSpace/cpustats_srm/$1

scp sirish.aditya@$1:/home/sirish.aditya/mem_11-19.csv /Users/sirish.aditya/workSpace/cpustats_srm/$1

scp sirish.aditya@$1:/home/sirish.aditya/cpu_11-19.csv /Users/sirish.aditya/workSpace/cpustats_srm/$1

-

ssh sirish.aditya@remote_machine 'bash -s' < memory.sh remote_machine

有人可以为此提供帮助吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以将远程执行的一部分提取到外部脚本,然后将其条件化地传递给exit函数。

例如:

exec_in_remote.sh

#!/bin/bash

cd /var/log/sysstat/    
for (( i = 11; i <= 19; i++ ))
do
 sar -f $i >> /home/sirish.aditya/cpu_11-19.csv
 sar -f $i -r >> /home/sirish.aditya/mem_11-19.csv
done

然后在你的主脚本中:

set -x
ssh $1 'bash -s' < exec_in_remote.sh

mkdir /Users/sirish.aditya/workSpace/cpustats_srm/$1
scp sirish.aditya@$1:/home/sirish.aditya/mem_11-19.csv /Users/sirish.aditya/workSpace/cpustats_srm/$1
scp sirish.aditya@$1:/home/sirish.aditya/cpu_11-19.csv /Users/sirish.aditya/workSpace/cpustats_srm/$1

如上所述运行它:

ssh sirish.aditya@remote_machine 'bash -s' < memory.sh remote_machine

答案 1 :(得分:0)

试试这个,

set -x

ssh $1 <<'EOT'

cd /var/log/sysstat/

for (( i = 11; i <= 19; i++ ))

do

 sar -f $i >> /home/sirish.aditya/cpu_11-19.csv

 sar -f $i -r >> /home/sirish.aditya/mem_11-19.csv

done
EOT

mkdir /Users/sirish.aditya/workSpace/cpustats_srm/$1

scp sirish.aditya@$1:/home/sirish.aditya/mem_11-19.csv /Users/sirish.aditya/workSpace/cpustats_srm/$1

scp sirish.aditya@$1:/home/sirish.aditya/cpu_11-19.csv /Users/sirish

使用here doc发送您尝试远程运行的命令。