我想使用 ssh 在远程服务器上执行一堆命令,并希望提供获取服务器名称和其他信息作为参数的灵活性。控制台上打印的命令有效,但作为 shell 脚本执行时无效。到目前为止,我已经设法使用 bash 手册页和研究各种站点构建了脚本。
#!/bin/bash
SERVER=
USER=()
KEYFILE=()
PORT=()
while getopts ":s:u:k:p:" opt; do
case ${opt} in
s ) SERVER=$OPTARG ;;
u ) USER=($OPTARG "@") ;;
k ) KEYFILE=("-i" "$OPTARG" ) ;;
p ) echo $OPTARG && PORT=("-p" "$OPTARG") ;;
\: )
echo "Missing argument for option $OPTARG" 1>&2
exit 1
;;
\? )
echo "Invalid Option: -$OPTARG" 1>&2
exit 1
;;
* ) echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
esac
done
USER=(${USER[@]} $SERVER)
printf -v userIdPattern '%s' "${USER[@]}"
declare ssh_cmd=("/usr/bin/ssh" "${PORT[@]}" "${KEYFILE[@]}" "$userIdPattern" )
echo "Ssh command ${ssh_cmd[@]}"
declare ls_cmd=("${ssh_cmd[@]}" "ls -al")
echo "ls command ${ls_cmd[@]}"
$("${ls_cmd[@]}" )
当执行如下操作时
./generalSetup.sh -s app4 -u me
我得到了回复
./generalSetup.sh:第 35 行:总计:未找到命令
消息表明 ssh 命令正在尝试执行 ls 命令的输出,但不确定如何将不同的命令作为数组传递。
最终目标是将其提取为一个函数并在目标服务器上执行一组命令。
我究竟做错了什么?