![如何结合使用 ssh 和 cd 命令?](https://linux22.com/image/164928/%E5%A6%82%E4%BD%95%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8%20ssh%20%E5%92%8C%20cd%20%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我正在尝试编写一个 bash 脚本来更新远程 git 存储库。该脚本看起来像:
#!/bin/bash
ssh [email protected] 'cd /home/h/usr/praktikum | git pull | sbatch run.sh'
然而,该cd
命令没有任何效果!
致命:不是 git 存储库(或挂载点 /home 之前的任何父存储库)
如何进入 git 文件夹:/home/h/usr/praktikum
运行我的 git 命令?
答案1
管道 ( |
) 用于在管道中将多个命令的输入和输出连接在一起。这些命令彼此独立且同时运行,除了等待输入出现或读取输出时之外。这就是为什么和命令cd
不影响当前目录的原因。您不想在这里使用管道。git
sbatch
你想做的是
ssh [email protected] 'cd /home/h/usr/praktikum && { git pull; sbatch run.sh; }'
这样做的目的是cd
访问指定的目录,如果一切顺利(该目录存在并且您有权访问它),则运行git
和命令。sbatch
在上面的命令中,sbatch
无论 的退出状态如何,都会运行git pull
。sbatch
如果您想避免git
由于某种原因失败而运行,请使用
ssh [email protected] 'cd /home/h/usr/praktikum && git pull && sbatch run.sh'
答案2
这对我有用:
ssh [email protected] -t "cd /home/h/usr/praktikum && git pull && sbatch run.sh; bash --login"
因为不会让你处于远程 shell 中:
ssh [email protected] -t "cd /home/h/usr/praktikum && git pull && sbatch run.sh"