cp-Befehl meldet nicht vorhandenes Verzeichnis, obwohl es existiert

cp-Befehl meldet nicht vorhandenes Verzeichnis, obwohl es existiert

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 ~)


Benutze das:

eval target=$target # unsafe

oder besser, erweitert aber nur ~:

target="${target/#\~/$HOME}"

oder noch besser: Geben Sie Variablen oder Ähnliches readerst gar nicht ein.

verwandte Informationen