我正尝试使用ssh远程运行此命令:
remote_command="fname=$(echo $(basename $(ls /opt/jboss/standalone/deployments/*.ear))); mv /opt/jboss/standalone/deployments/${fname}.undeployed /opt/jboss/standalone/deployments/${fname}.dodeploy"
此命令在远程服务器上重新部署ear文件(如果存在扩展名为.undeploy的ear文件)。只有一只耳朵。
remote_command变量传递给负责运行var remote_command的函数:
function run_remote_command() {
local command=$1
local output=$(sshpass -pPassw ssh user@host_ip '$command' 2>&1)
}
对该功能的调用是
run_remote_command $remote_command
当我运行主脚本时,执行远程命令: 为var fname分配ear文件名的值。 但是当用mv。
执行时,$ fname为空有人可以告诉我我错过了什么吗?
致以最诚挚的问候,
阿兰
答案 0 :(得分:4)
由于您没有正确引用该命令,您的本地 shell正在展开$fname
function run_remote_command() {
local command=$1
# must double quote the command here
sshpass -pPassw ssh user@host_ip "$command"
}
# must use single quotes here. newlines added for clarity
remote_command='
root=/opt/jboss/standalone/deployments
ear_files=($root/*.ear)
if [[ "${ear_files[0]}" ]]; then
fname=$(basename "${ear_files[0]}")
mv "$root/${fname}.undeployed" "$root/${fname}.dodeploy"
fi
'
# must double quote the command here
run_remote_command "$remote_command"
我假设你的远程端的shell是bash。