J'ai un script qui commence comme ça
#!/bin/bash
VALKYRIE=~/myProjects/valkyrie
source $VALKYRIE/cluster.conf
mais quand je l'exécute, il revient
line 2: ~/myProjects/valkyrie/cluster.conf: No such file or directory
mais le fichier existe et lorsque je l'exécute, source ~/myProjects/valkyrie/cluster.conf
il fonctionne très bien. Une idée? J'ai défini une VALKYRIE
variable ailleurs, donc le code en dur dans le chemin n'est pas une option.
source "${VALKYRIE}/cluster.conf"
.~
une mauvaise expansion. Lorsque j'exécute votre script avec un chemin intentionnellement faux, l'erreur ne dit pas~
, mais étend le chemin. Pouvez-vous essayer de remplacer le~
dans votre script par le chemin absolu? Essayez également d'exécuter ce qui suit dans un scriptecho ~
.$HOME
au lieu de~
.~/.pam_environment
n'est pas un script shell, donc il ne fait pas les choses courantes que vous attendez d'un shell, comme l'expansion tilde et l'expansion des paramètres, donc ni~
ni$HOME
ne sera remplacé. Si vous déplacez cette ligne à la~/.profile
place et que vous l'ajoutezexport
devant, cela devrait fonctionner.Réponses:
~
ne semble pas se développer correctement. Lorsque j'exécute votre script avec un chemin intentionnellement faux, l'erreur ne dit pas~
, mais étend le chemin (c'est-à-dire/home/sparhawk/fakepath
non~/fakepath
. Vous pouvez essayer d'utiliser à la$HOME
place de~
ou d'utiliser le chemin complet dans le script à la place.(Je ne sais pas pourquoi
~
ne fonctionne pas sur votre système, car votre script fonctionne bien pour moi.)la source
$HOME
c'est mieux que~
dans une variable~
?x="~/.bashrc"; ls $x
- dans l'ordre des extensions pour la commande "ls", bash recherche un tilde et n'en trouve pas; finalement bash voit une variable et la développe. bash ne revient pas en arrière et ne cherche plus de tildes, à ce stade, c'est juste un personnage ordinaire. et il n'y a aucun fichier dans le répertoire courant qui commence par un tilde.x=~/".bashrc"; ls $x
fonctionne. Merci pour l'info.