Ich habe ein Skript, das so beginnt
#!/bin/bash
VALKYRIE=~/myProjects/valkyrie
source $VALKYRIE/cluster.conf
aber wenn ich es starte, kehrt es zurück
line 2: ~/myProjects/valkyrie/cluster.conf: No such file or directory
Aber die Datei existiert und wenn ich sie ausführe source ~/myProjects/valkyrie/cluster.conf
, läuft sie einwandfrei. Irgendeine Idee? Ich habe die VALKYRIE
Variable an anderer Stelle festgelegt, sodass Hardcode im Pfad keine Option ist.
source "${VALKYRIE}/cluster.conf"
.~
nicht richtig expandiert. Wenn ich Ihr Skript mit einem absichtlich gefälschten Pfad ausführe, sagt der Fehler nicht~
, sondern erweitert den Pfad. Können Sie versuchen, das~
in Ihrem Skript durch den absoluten Pfad zu ersetzen ? Versuchen Sie außerdem, Folgendes in einem Skript auszuführenecho ~
.$HOME
statt~
.~/.pam_environment
ist kein Shell-Skript, daher macht es nicht die üblichen Dinge, die Sie von einer Shell erwarten würden, wie z. B. Tilde-Erweiterung und Parameter-Erweiterung~
noch$HOME
ersetzt werden. Wenn Sie diese Zeile~/.profile
stattdessen nach verschieben undexport
vorne hinzufügen , sollte dies funktionieren.Antworten:
~
scheint sich nicht richtig auszudehnen. Wenn ich Ihr Skript mit einem absichtlich gefälschten Pfad ausführe, sagt der Fehler nicht~
, sondern erweitert den Pfad (dh/home/sparhawk/fakepath
nicht~/fakepath
. Sie können versuchen,$HOME
stattdessen~
den vollständigen Pfad im Skript zu verwenden oder stattdessen den vollständigen Pfad zu verwenden.(Ich bin nicht sicher, warum
~
es auf Ihrem System nicht funktioniert, da Ihr Skript für mich gut funktioniert.)quelle
$HOME
ist es besser als~
in einer Variablen~
?x="~/.bashrc"; ls $x
: In der Reihenfolge der Erweiterungen für den Befehl "ls" sucht bash nach einer Tilde und findet keine. Schließlich sieht bash eine Variable und erweitert sie. bash geht nicht zurück und sucht wieder nach Tildes, an diesem Punkt ist es nur ein einfacher Charakter. und es gibt keine Dateien im aktuellen Verzeichnis, die mit einer Tilde beginnen.x=~/".bashrc"; ls $x
funktioniert. Danke für die Information.