29 votes

"~ / Desktop / test.txt: aucun fichier ou répertoire de ce type"

J'ai écrit ce script:

 #!/bin/bash

file="~/Desktop/test.txt"
echo "TESTING" > $file
 

Le script ne fonctionne pas; cela me donne cette erreur:

 ./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory
 

Qu'est-ce que je fais mal?

46voto

Michael Hoffman Points 8557

Essayez de remplacer ~ avec $HOME. Tilde expansion ne se produit que lorsque le tilde est non cotées. Voir info "(bash) Tilde Expansion".

Vous pouvez également faire de file=~/Desktop sans le citant, mais si jamais vous remplacer une partie de ce à quelque chose avec un séparateur de champ, alors il va se casser. Citant les valeurs des variables est probablement une bonne chose de prendre l'habitude de toute façon. Citant variable file=~/"Desktop" fonctionne également, mais je pense que c'est plutôt laid.

Une autre raison de préférer $HOME, quand c'est possible: tilde expansion ne se produit au début des mots. Donc, command --option=~/foo ne fonctionnera que si command ne tilde expansion elle-même, qui varient selon la commande, tout en command --option="$HOME/foo" le sera toujours.

2voto

Sangdol Points 3374

Pour info, vous pouvez également utiliser eval :

 eval "echo "TESTING" > $file"
 

Le eval prend la commande comme argument et fait que le shell fasse l' expansion Tilde .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X