我有两个当地的文件,一个config.sh
包含变量定义,另一个script.sh
包含 bash 脚本。
在本地,我可以这样做:
source config.sh; bash script.sh
我正在通过 ssh 寻找同样的东西,到目前为止我已经完成了这项工作:
ssh user@host 'bash -s' < script.sh
但我不确定是否应该使用cat
或一些输入管道<(...)
来执行 config.sh 和 script.sh。
执行需要使用 ssh 传输一些内容的多个命令的最佳、干净的方法是什么?
答案1
假设两个脚本都在本地主机上,而不是远程主机上:
cat config.sh script.sh | ssh -T remote_host bash
如果您希望在远程端强制分配伪 TTY,则可能需要使用“-t”标志。由于您的 stdin 来自管道,因此本地 SSH 进程不会有伪 TTY。如果远程bash
端的默认 shell 不是伪 TTY,则只需在命令行末尾添加字符串“”。另外,请注意,除非您的“变量定义”导出相关的环境变量,否则您的原始代码将无法工作。
答案2
使用 EXPECT 从远程计算机运行脚本,这样您的脚本就会像在本地计算机上一样执行。以下是如何使用 EXPECT 的简短演示。