web-dev-qa-db-fra.com

Problème lors de la tentative d'exécution d'un script shell: aucun fichier ou répertoire de ce type

J'essaie d'exécuter la commande suivante sur bash:

./home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

qui me donne un

bash: ./home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux/rvm: No such file or directory

rvm est un fichier bash et il s'exécute correctement lorsque je tente de l'exécuter à partir de son propre dossier (production_x86_64-linux). Cela fonctionne aussi très bien si j'essaie de l'exécuter lors de l'ouverture du terminal dans son dossier parent, par exemple, ou même dans son dossier parent-parent.

Je l'ai déjà utilisé avec dos2unix juste au cas où et j'ai également vérifié ses autorisations d'exécution, ce qui semble bien se passer.

Qu'est-ce que j'oublie ici?

5
devoured elysium

vous pouvez exécuter un script bash en utilisant la commande suivante

bash <location of the script file>

dans ton cas

bash /home/abcdef/Desktop/jikesrvm/dist/production_x86_64-linux/rvm

ça va marcher

ce que fondamentalement le. signifie est votre emplacement de répertoire actuel.

si vous êtes dans votre dossier <user> essayez de le faire

./Desktop/jikesrvm/dist/production_x86_64-linux/rvm

cela fonctionnera mais vous devez d’abord rendre le fichier exécutable en utilisant la commande suivante

chmod +x ~/Desktop/jikesrvm/dist/production_x86_64-linux/rvm
4
bolzano

Pendant que vous essayez:

./home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

Shell traitera toujours . devant un chemin en tant que répertoire actuel et le chemin sera donc toujours un chemin relatif. Donc, Shell essaie de trouver un fichier exécutable à l’emplacement:

$PWD/home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

ce qui est faux comme vous pouvez le voir. Vous exécuteriez un script exécutable correspondant au répertoire actuel sous le nom ./script.sh.

En fait, vous pouvez simplement exécuter le fichier exécutable en utilisant le chemin absolu (étant donné que le script est exécutable):

/home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

Ou si ~ est développé par Shell comme $HOME:

~/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

Ou même simplement le nom du script si le répertoire contenant le script est dans la variable d'environnement PATHname__.

Maintenant, si votre script est Non exécutable, vous pouvez aussi l'exécuter sans en faire un exécutable en indiquant au Shell quel programme gérera le script, c'est-à-dire en lui donnant comme argument bash(Shell):

bash /home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm
2
heemayl

Lorsque vous utilisez ./ pour exécuter un fichier, le dossier en cours (.) est recherché dans un dossier nommé home au lieu de partir du répertoire racine (/).

Utiliser explicitement la commande bash comme dans la réponse de bolzano commence à partir du répertoire racine au lieu de celui dans lequel vous vous trouvez.

Pour utiliser la commande sans bash, vous pouvez entrer

/home/abcdef/Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

ou

Desktop/jikesrvm/dist/prototype_x86_64-linux/rvm

depuis votre répertoire personnel en supposant qu’il soit marqué comme exécutable.

1
Robobenklein