Shell脚本:包含变量的call命令

时间:2017-04-27 22:52:49

标签: bash shell unix sh

这个脚本有什么问题?

GenericMethodCache

它说#!/bin/sh SONAR="~/SonarQube/bin/linux-x86-64/sonar.sh" echo "Waiting to start..." $($SONAR start) 但确实存在。我尝试了大量的变体,它只适用于eval:./start.sh: 4: ./start.sh: ~/SonarQube/bin/linux-x86-64/sonar.sh: not found

3 个答案:

答案 0 :(得分:4)

请改为尝试:

#!/bin/sh
SONAR=~/"SonarQube/bin/linux-x86-64/sonar.sh"
echo "Waiting to start..."
"$SONAR" start

通过引用(如globbing)禁用Tilde扩展,因此您需要将波形符号放在引号之外。

最后一行不应该在$()内,因为这样做首先执行命令,然后扩展内容并尝试执行由此类内容表达的命令。

答案 1 :(得分:3)

脚本通常使用$HOME代替~。即使在双引号内,$HOME也会扩展。

#!/bin/sh
SONAR="$HOME/SonarQube/bin/linux-x86-64/sonar.sh"
echo "Waiting to start..."
"$SONAR" start

答案 2 :(得分:2)

您在双引号之间使用~,因此它不会被解释为/home/whatever

#!/bin/sh
SONAR=~/SonarQube/bin/linux-x86-64/sonar.sh