我有两个 bash 脚本main.sh
和一个util.sh
,我在by usingutils.sh
中引用。现在我想通过 ssh 运行。显然,这是行不通的:main.sh
. util.sh
main.sh
ssh 用户@主机“bash /dev/stdin < main.sh”
因为远程 shell 找不到util.sh
.那么我应该如何做到这一点,而不复制util.sh
到远程机器?
答案1
尽管我认为部署到util.sh
将host
是更好/更稳定的解决方案,但您可以做一些事情,例如将其放在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 进程。请注意,我已删除双引号:进程替换需要在两个文件所在的本地计算机上运行。