Mar*_*ert 4 ssh bash shell command-line exit
我有以下类型的 shell 脚本:
#!/bin/bash
ssh mylogin@myremotemachine.com
echo "Hi"
exit
Run Code Online (Sandbox Code Playgroud)
我在本地运行它以在远程服务器上执行某些操作(由“echo“Hi”表示)。但是,当我运行它时,我在远程服务器上看到了提示——因此没有执行“退出”命令。当我在远程提示上手动输入“退出”时,我看到“连接到 myremotemachine.com”关闭,然后 “嗨”。如何设置 shell 脚本以使其正确退出并向我显示我执行它的(本地)提示?
https://unix.stackexchange.com/questions/89747/ssh-exits-after-quit-case-in-bash-script和ssh 和 shell 通过 ssh:如何退出?似乎有些相关,但我无法适应那里提出的想法。/
更新
以下,不是那么最小的版本导致Unmatched '..
#!/bin/bash
date=`date "+%Y-%m-%d"`
rsync -acxzP --delete --link-dest=/u3/mylogin/backup/old_backup /home/mylogin mylogin@myremotemachine.com:/u3/mylogin/backup/$date\_backup
ssh mylogin@myremotemachine.com bash -c "'
rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup
exit
'"
Run Code Online (Sandbox Code Playgroud)
如果我删除此代码段中的双引号,我会得到:bash: -c: option requires an argument和date: Undefined variable.
这应该可以解决您的问题。
ssh mylogin@myremotemachine.com << HERE
rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup
HERE
Run Code Online (Sandbox Code Playgroud)
或者您可以执行以下操作。将要在远程主机上运行的所有命令放在一个单独的脚本中。给它起一个像 remote.sh 这样的名字
现在运行以下命令
ssh mylogin@myremotemachine.com 'bash -s' < /path/to/remote.sh
Run Code Online (Sandbox Code Playgroud)
remote.sh 包含的地方。
rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64465 次 |
| 最近记录: |