【发布时间】:2021-09-24 04:20:28
【问题描述】:
单主机工作脚本
我在 .bashrc 中获取了以下 bash 脚本,并且在单个主机名 host1 上运行良好。 我可以毫无问题地执行 scp、rsync 和其他远程命令。 但我想将它用于多个主机名,例如。主机 1、主机 2、主机 3。
HPC_HOST=${HPC_HOST:-host1}
lastarg() {
# get the last argument
for last; do true; done; echo $last;
}
hpc() {
HERE="~${PWD#$HOME}"
ssh -t $HPC_HOST "cd $HERE; bash";
}
scp_to_hpc() {
# Usage: scp_to_hpc files
# Purpose: will copy file to crysden:$(pwd)/file
#hpc_mkcwd
HERE="~${PWD#$HOME}"
scp $@ $HPC_HOST:$HERE
}
当前解决方案
目前我创建了相同脚本的三个副本,并根据主机名相应地修改了函数名称。
预期解决方案
我希望必须有一种方法可以在上述脚本中调用多个主机名。 并使用anyhost执行命令。(可能我们还需要为主机名定义函数变量。
我也了解在上述 bash 脚本中使用多个主机的可能想法。
【问题讨论】:
-
你的意思是你想一次性在三台主机上运行相同的命令,还是只是概括脚本以便它不会硬编码
host1? -
顺便说一句,未引用的
$@基本上总是一个错误;如果您有包含空格的参数,它将中断。一般来说,在寻求人工帮助之前先尝试shellcheck.net。 -
@tripleee 感谢您对
$@的建议。我会仔细看看的。目前,我设法通过将所有内容放在heredoc中并将所有函数名称更改为变量来解决我的问题,例如scp_to_hpc更改为scp_to_${hpc}。因此,对于每个主机,它都会创建单独的文件。这么晚才回复很抱歉。并感谢您的建议。
标签: bash remote-access hpc heredoc