
Ich schreibe ein Bash-Skript und mache darin etwa Folgendes:
#!/bin/sh
read -p "Enter target directory: " target_dir
cp some/file.txt $target_dir/exists/for/sure/
Wenn ich dieses Shell-Skript ausführe, sehe und gebe ich Folgendes ein:
./my_script.sh
Enter target directory: ~/my_dir
Aber ich bekomme den Fehler/die Ausgabe:
cp: directory ~/my_dir/exists/for/sure/ does not exist
Und, wie ich deutlich machen möchte: Dieses Verzeichnis ist zu 100 % vorhanden. Das heißt, ich kann Folgendes ausführen, ohne eine Fehlermeldung zu erhalten:
cd ~/my_dir/exists/for/sure/
Was ist denn hier los?
Antwort1
Das Problem besteht darin, dass dies ~
wörtlich genommen und nicht erweitert wird, wenn Sie es als Eingabe für eingeben read
.
Probier es aus:
$ read target
~
$ ls $target
ls: cannot access '~': No such file or directory
(beachten Sie die Anführungszeichen um ~
)
eval target=$target # unsafe
oder besser, erweitert aber nur ~
:
target="${target/#\~/$HOME}"
oder noch besser: Geben Sie Variablen oder Ähnliches read
erst gar nicht ein.