Bash-Pfad, der seltsam wirkt

300

Ich versuche, openscadvon der Befehlszeile aus zu laufen, und es wird ein Fehler ausgegeben, aber wenn ich den gesamten Pfad eingebe, von dem er wie unten gezeigt zu funktionieren scheint.

[dataproc@Euclid ~]$ which openscad /usr/bin/openscad [dataproc@Euclid ~]$ openscad bash: /usr/local/bin/openscad: No such file or directory [dataproc@Euclid ~]$ /usr/bin/openscad [dataproc@Euclid ~]$ #this worked 

Ich bin völlig ahnungslos, was hier vor sich geht, jede Hilfe wäre sehr dankbar.

5
Was produziert `type openscad`? Chris Eberle vor 12 Jahren 4
Was ist die Ausgabe von "Echo $ PATH" vor 12 Jahren 1

2 Antworten auf die Frage

6
geekosaur

whichLügen; Es kann Dinge basierend auf einer idealisierten Situation aus den Shell-Startdateien melden, wobei einige Möglichkeiten fehlen und keine Änderungen eingehen, die nicht von den Standarddateien vorgenommen wurden. Verwenden Sie typediese Option, um zu sehen, was die Shell wirklich meint.

2@mress:1 B$ type which which is /usr/bin/which 

Externe Befehle können einfach nicht sagen, was wirklich passieren wird, da sie Funktionen und Aliasnamen basierend auf Ihren Startdateien erraten müssen und nicht wissen, was durch autoloadMechanismen erstellt wird . Sie müssen die Shell selbst fragen, was sie tun soll.

2@mress:2 B$ type type type is a shell builtin 
Alles, was Sie geschrieben haben, ist richtig, hat aber nicht geantwortet, warum seine Bash für das einfache "openscad", "/ usr / local / bin / openscad: Keine solche Datei oder Verzeichnis" zurückkehrt. vor 12 Jahren 0
@kobame: Weder ich noch irgendjemand sonst kann die Antwort wissen, ohne die Ausgabe von 'type openscad' zu kennen. Welches ist, was ich versuchte zu erklären; anscheinend habe ich versagt. geekosaur vor 12 Jahren 0
[dataproc @ Euclid ~] $ type openscad openscad wird gehasht (/ usr / local / bin / openscad) vor 12 Jahren 0
Ich bin nicht sicher, was "openscad is hashed" bedeutet, aber es gab keinen Alias ​​für den Befehl. Vielen Dank für die schnelle Antwort. vor 12 Jahren 0
@shawn: Führen Sie `hash -r` aus und geben Sie dann erneut` openscad` ein. Sieht so aus, als wäre es in `/ usr / local / bin` gewesen, wurde verschoben und die Shell hat ihren internen Standort-Hash nicht aktualisiert. geekosaur vor 12 Jahren 0
@shawn: Die meisten Shells behalten eine Hashtabelle bei, die eine Hash-Version eines einfachen Befehls einem vollständigen Pfadnamen zuordnet, da vollständige $ PATH-Suchen ziemlich teuer sind, wenn Sie eine Shell sind und die Ausführung dieser Befehle Ihre Hauptfunktion ist. Mit dem Befehl `hash` kann diese Tabelle bearbeitet werden. geekosaur vor 12 Jahren 0
Dank Geekosaur, der funktioniert hat, werde ich mich mit diesem Hash-Befehl ein wenig genauer vertraut machen und hoffentlich erkennen können, was beim nächsten Mal passiert. vor 12 Jahren 0
@geekosaur Schöne Erklärung! thanx. Eine Frage: Wann (und wie) aktualisiert Bash seine Hashtabelle? Wenn ich also eine neue Version eines beliebigen Befehls in ein anderes Verzeichnis in PATH installiere und sie danach lösche - wenn die Hashtabelle aktualisiert wurde? vor 12 Jahren 0
@ kobame: Ich kenne die spezifischen Regeln für `bash 'nicht. Einige Shells prüfen regelmäßig die Änderungszeit für Verzeichnisse in $ PATH. Einige scheinen sich nie zu aktualisieren. Ich habe einfach die Gewohnheit entwickelt, immer "hash -r" zu tun, nachdem Sie Änderungen an einem Verzeichnis in "$ PATH" vorgenommen haben (Programme installieren, entfernen oder verschieben usw.). geekosaur vor 12 Jahren 0
Ich denke, es muss nur ausgeführt werden, wenn Sie etwas in Ihrem Pfad hatten, das Sie manuell löschen und durch etwas in einem anderen Verzeichnis auch im Pfad ersetzen. Ich benutze bash schon eine ganze Weile und dies ist das erste Mal, dass ich ein solches Problem habe. vor 12 Jahren 0
0
jm666

Ohne zu wissen, Ihre .profile (.bashrc usw.) nur zu raten, als Sie irgendwo haben

alias openscad=/usr/local/bin/openscad 

Aus diesem Grund wird in der Bash versucht, / usr / local / bin / openscad auszuführen, und nicht die Standardeinstellung in / usr / bin.