Quel est le problème avec ce script?
#!/bin/sh SONAR="~/SonarQube/bin/linux-x86-64/sonar.sh" echo "Waiting to start..." $($SONAR start)
Il dit ./start.sh: 4: ./start.sh: ~/SonarQube/bin/linux-x86-64/sonar.sh: not found
mais il existe. J’ai essayé énormément de variations, cela ne fonctionne qu’avec eval: eval $SONAR start
.
Essayez plutôt ceci:
#!/bin/sh SONAR=~/"SonarQube/bin/linux-x86-64/sonar.sh" echo "Waiting to start..." "$SONAR" start
L’expansion de tilde est désactivée en citant (comme le globbing), vous devez donc mettre le tilde en dehors des guillemets.
La dernière ligne ne doit pas se trouver dans $()
, car elle exécute d’abord la commande, puis développe le contenu et tente d’exécuter une commande exprimée par un tel contenu.
Les scripts utilisent généralement $HOME
au lieu de ~
. $HOME
se développera même à l’intérieur des guillemets.
#!/bin/sh SONAR="$HOME/SonarQube/bin/linux-x86-64/sonar.sh" echo "Waiting to start..." "$SONAR" start
Vous utilisez le ~
entre les doubles guillemets, donc cela ne va pas être interprété comme /home/whatever
.
#!/bin/sh SONAR=~/SonarQube/bin/linux-x86-64/sonar.sh