linux - Bash 代码在它应该执行之前执行

标签 linux bash shell

我正在通过 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/

相关文章:

linux - 如何使用 puppet 脚本创建具有同名主要组的用户?

python - 用于从文件中选择单个 Python 函数的 Bash 脚本

bash - ssh 主机 'history | tail' 没有输出

linux - Grep 用于多个目录的关键字并移动找到的文件

Bash 函数从 POSIX PATH 中删除重复项

database - 我正在寻找适合ssd磁盘的数据库

linux - 在 Linux 中合并来自同一文件的列

c - 如何使用 C API 在 Linux 下构建独立的 MQSeries 客户端?

linux - 尝试放置错误变量时如何修复 Tcl 'Command not found' 错误?

linux - 如何删除 shell 脚本中字符串中所有出现的点?