我正在编写一个 bash 脚本,我有一个获取 3 个参数、一个主机名、一个命令和一个文件的函数,它应该在该主机名上执行命令并将输出重定向到文件名。这是函数:
execmd ()
{
P_SERV="$1"
P_CMD="$2"
P_OUT="$3"
X_SERV=`hostname`
if [ "$P_SERV" = "$X_SERV" ] ; then
$P_CMD >> $P_OUT
else
ssh $P_SERV $P_CMD >> $P_OUT
fi
}
当我执行时:
execmd venus "cat /proc/meminfo" /tmp/meminfo
我收到错误
cat /proc/meminfo: no such file or directory
知道为什么它不起作用吗?使用本地主机名或远程主机名调用它时,行为相同。
答案1
SSH 执行远程 shell。要获得本地执行的一致行为,请执行本地 shell。
if [ "$P_SERV" = "$X_SERV" ] ; then
sh -c "$P_CMD" >> "$P_OUT"
else
ssh "$P_SERV" "$P_CMD" >> "$P_OUT"
fi
别忘了替换周围用双引号引起来。例如,没有双引号,如果P_CMD
包含通配符,那么它们将在ssh $P_SERV $P_CMD
.