我正在通过 ssh 在远程服务器上运行一些代码,但是当我尝试执行代码以保存到变量“APP”时,它会在安装文件之前运行,并且还会在本地计算机而不是远程计算机上执行。我做错了什么?
ssh $TARGET_USER@$TARGET_IP << EOF
if [ ${PACKAGE: -4} == ".dmg" ]; then
hdiutil attach -mountpoint $MOUNTPOINT $FILE_STORE$PACKAGE
APP=`sudo find $MOUNTPOINT -maxdepth 2 -name \*.app | wc -l | tr -d ' '`
fi
EOF
这是我的代码的简化版本,我希望变量 APP 包含行数 0 或 1 或更多。
最佳答案
我不完全明白你想要什么,但你的大部分(如果不是全部)问题都是由于 << EOF
引起的。部分:
您本地 shell 在将结果发送到执行它的远程端之前对内容进行某些扩展。这会同时影响 $VAR
东西和反引号的东西。
如果你使用 << 'EOF'
相反,则不会发生本地替换。
如果 - 另一方面 - 你想要替换反引号的变量 bot not 然后使用这个:
... << EOF
...
APP=\$(sudo ...)
EOF
关于linux - Bash 代码在它应该执行之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482544/