Wie kann ich Bash dazu bringen, „~“ zu konvertieren?

Wie kann ich Bash dazu bringen, „~“ zu konvertieren?

Einige Programme erkennen die Tilde-Verknüpfung in Dateinamen nicht und erwarten vollständige kanonische Pfade, z. B. /home/dave/myfile.txtstatt ~/myfile.txt.

Gibt es eine Möglichkeit, Bash dazu zu bringen ~, ~userbei jeder Verwendung einer Tilde die vollständigen kanonischen Pfade zu ersetzen?

Antwort1

Nun, bei Perl bin ich mir nicht sicher, aber im Bash-Skript können Sie diese Konvertierung mit eval durchführen:

eval dir='~user/somedir'

$dir enthält an dieser Stelle den vollständigen Pfad, also /home/user/somedir.

Antwort2

Wenn Sie einen Befehl in der Bash-Shell ausführen, etwa:

command ~/myfile.txt

Die Shell nimmt zuerst die Erweiterung vor ~(sofern es nicht in Anführungszeichen steht) und führt dann den Befehl mit dem Ergebnis aus.

Aber es stimmt, einige Programme interpretieren das nicht ~, zum Beispiel:

$ cat "~/myfile.txt"
~/myfile.txt: No such file or directory

aber stattdessen funktioniert das hier:

nano "~/myfile.txt"

Dieses Verhalten wird jedoch durch die Bash-Erweiterung maskiert.Sie brauchen keine weitere Interpretation.

Vielleicht ist es offensichtlich, aber beachten Sie: Wenn ein Programm Konfigurationsdateien verwendet und darin einige Pfade erwartet, ist es nicht die Aufgabe von Bash, diese zu erweitern.

verwandte Informationen