2016-09-13 103 views
0

因此,对于我的脚本,我希望ssh进入远程主机,并在脚本结束后保留​​在远程主机中,并且还要将目录更改为与远程主机匹配脚本结束。Ksh脚本:如何保持在ssh中并继续运行脚本

#!/bin/ksh 

ssh -t -X [email protected] 'cd $HOME/bin/folder1; echo $PWD; ssh -q -X ssh [email protected]; cd $HOME/bin/folder2; echo $PWD' 

PWD在第二个ssh之前正确更改。第二个ssh的原因是因为它结束了正确的远程主机中的脚本,但它不会保留我试图通过将命令放在其后的目录更改,但它们不会执行。

有没有人有任何想法?

+1

你想解决什么特别的任务?它看起来像你需要'screen'工具 –

+0

我的脚本sshs snd执行数据分析并将其输出到远程主机上的一个文件夹中。脚本结束后,用户将从远程主机启动。 我希望用户保留在远程主机中,并位于数据分析完成的目录中。 – BennyBen

回答

1

在命令列表的末尾只要启动一个shell:

ssh -t -X [email protected] 'cd $HOME/bin/folder1; echo $PWD; ssh -q -X ssh [email protected]; cd $HOME/bin/folder2; echo $PWD; ksh' 

如果您希望shell是登录一个(即一个读取.profile),使用exec -l

ssh -t -X [email protected] 'cd $HOME/bin/folder1; exec -l ksh' 

如果远程服务器使用的旧ksh版本不支持内置的exec -l,并且如果bashksh93可用,则此处为解决方法:

ssh -t -X [email protected] 'cd $HOME/bin/folder1; exec bash -c "exec -l ksh"' 
+0

这是行不通的: ssh -t -X mylogin @ myremotemachine'cd $ HOME/bin/folder1; ksh' 但我怎么让它看起来像原来的壳而不是基本的壳?我想我现在需要执行.profile,我怎么把它加到那个命令上而不让用户一直输入它呢? – BennyBen

+0

我得到一个ksh:-l:找不到消息。 – BennyBen

+0

什么操作系统正在运行远程主机和什么版本的'ksh'? – jlliagre