尝试在具有公共ssh密钥的计算机上使用bash连接到多台计算机,并在它们上运行命令以在该计算机上显示输出。如果我在执行脚本时使用下面的代码中的' $ a '变量,则会得到未完成的输出
bash: total: command not found
bash: line 1: drwxr-xr-x: command not found
bash: line 2: drwxr-xr-x: command not found
bash: line 3: -rw-r--r--: command not found
bash: line 5: -rwxr-xr-x: command not found
....
但是,如果我在不调用 $ a 变量的情况下使用带注释的块,则bash会打印命令的正确输出。
执行的代码:
#!/bin/bash
a=$(ls -lah)
for i in "machine1" "machine2"
do ssh root\@"$i" "$a; exit;"
*#do ssh root\@"$i" "ls -lah; exit;" - displays accordingly*
done
答案 0 :(得分:2)
您的代码不起作用,因为a=$(ls -lah)
将ls -lah
的输出分配给变量a
。将其更改为a='ls -lah'
,就可以了。
请参阅bash手册中的命令替换部分
答案 1 :(得分:2)
嗨,我有一个很久以来一直在使用的答案。
declare machines=("user@machine1" "user@machine2")
command="ls -lah"
for machine in "${machines[@]}"
do
ssh "$machine" "$command"
done
$ a 无效,因为它将被执行。