运行一个引用 ssh 上另一个脚本的 shell 脚本

运行一个引用 ssh 上另一个脚本的 shell 脚本

我有两个 bash 脚本main.sh和一个util.sh,我在by usingutils.sh中引用。现在我想通过 ssh 运行。显然,这是行不通的:main.sh. util.shmain.sh

ssh 用户@主机“bash /dev/stdin < main.sh”

因为远程 shell 找不到util.sh.那么我应该如何做到这一点,而不复制util.sh到远程机器?

答案1

尽管我认为部署到util.shhost是更好/更稳定的解决方案,但您可以做一些事情,例如将其放在main.sh

#!/bin/bash

U=$(mktemp)
cat > "$U"
. "$U"
rm -f "$U"
# rest of script

然后运行

ssh user@host main.sh < util.sh

为了更加安全,您可能需要一些额外的编码来main.sh处理临时文件不可写/不可删除、没有输入传递stdin等问题。

答案2

这很丑陋,但应该有效:

ssh user@host bash < <(sed 's/\. util\.sh/ {r util.sh; d}' main.sh)

这会将 util 脚本的内容嵌入到主脚本中,然后将该脚本通过管道传输到远程主机上运行的 bash 进程。请注意,我已删除双引号:进程替换需要在两个文件所在的本地计算机上运行。

相关内容