Warum liest die Shell nicht aus Bash-Startdateien?

2603
writ

Ich versuche nur, die einfache Aufgabe zu erledigen, mein MySQL- Verzeichnis der PATH-Variablen hinzuzufügen, damit ich die mysqlBefehle usw. in meinem Terminal unter Mac OS X 10.6.6 (Snow Leopard) verwenden kann. Die nach Veränderung .profile, .bash_profileund sogar ein zu schaffen .bashrc, und um sicherzustellen, dass mein Weg richtig eingegeben wurde, jedes Mal wenn ich versuche Ausführen des mysqlBefehls oder Schlagen

echo $PATH 

gibt mir die gleichen exakten Ergebnisse:

/Users/GabbAHH/.rvm/gems/ruby-1.9.2-p136@rails3tutorial/bin:/Users/GabbAHH/.rvm/gems/ruby-1.9.2-p136@global/bin:/Users/GabbAHH/.rvm/rubies/ruby-1.9.2-p136/bin:/Users/GabbAHH/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin 

Wie Sie sehen, kein MySQL. Später stelle ich fest, dass dies nicht wirklich das Problem ist, da ich alle drei Dateien aus meinem /Users/GabbAHH/Benutzerverzeichnis entfernt habe und immer noch dasselbe Ergebnis bekomme!

Momentan sieht das Skript in meinen Startdateien so aus:

export PATH=/usr/local/mysql/bin:$PATH  export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH" 

Gab es etwas, das mein Terminal dazu gebracht hat, diese Startdateien zu umgehen? Liest es nur aus dem /etc/profileOrdner?

Ergibt das dasselbe Ergebnis? Egal, ich habe sie ausgetauscht.

Wie kann ich auch feststellen, ob ich eine interaktive oder nicht interaktive Shell und eine Login / Non-Login-Shell verwende? Ich bin in der Lage, Ordner usw. ohne eine Aufforderung zur Eingabe meines Passworts zu erstellen, obwohl ich mich erinnere, dass ich sudobeim Installieren von Gems für Ruby usw. viele Befehle hatte. Außerdem musste ich beim Drehen von MySQL mein Passwort eingeben an aus.

0
funktioniert es außerhalb des Startskripts? Orbit vor 13 Jahren 0
@writ Statt zu schreien * Vielen Dank * Eine bessere Option wäre, * seine Antwort anzunehmen *, indem Sie auf das grüne Häkchen neben seiner Antwort klicken, um anzuzeigen, dass die Lösung Ihnen geholfen hat, Ihr Problem zu lösen;) Yi Jiang vor 13 Jahren 0

2 Antworten auf die Frage

2

Einfach gesagt:

echo HELLO, I AM HERE 

in Ihrem Startskript und melden Sie sich wie gewohnt an.

Wenn Sie feststellen, dass die Zeichenfolge nicht gedruckt wird, umgehen Sie das Skript.

Darüber hinaus sollten Sie uns sagen, in welches Skript Sie es einfügen, da bashes einige ... ziemlich wundersame ... Regeln für die Entscheidung gibt, welche Skripts ausgeführt werden :-) Die Details finden Sie im INVOCATIONAbschnitt von man bash. Meine spezielle Version dauert ungefähr 50 Zeilen (und das mit einer 150-Spalte xterm), sodass ich Sie nicht langweilen werde, indem Sie sie hier posten.

Es genügt zu sagen, dass es kompliziert ist.

Sie könnten beispielsweise von der Tatsache gebissen werden, dass bashnur das erste von ~/.bash_profile, ausgeführt ~/.bash_loginwird und ~/.profiledas existiert und lesbar ist. Es kann sich um eine nicht interaktive Shell handeln, bei der die Regeln unterschiedlich sind. Sie können die Shell mit --noprofileoder --norcoder --rcfile=whateveroder ausführen --posix.

Die Möglichkeiten sind zwar nicht endlos, aber ärgerlich ärgerlich.

Danke für Ihre Antwort! Wenn ich das Terminal öffne (kein Login), bekomme ich "HELLO, I AM HERE" gedruckt, wenn ich "Echo HELLO, I AM HERE" eingebe. Bedeutet das also, dass das Skript zur Verwendung der Startdateien nicht umgangen wird? Ich glaube auch nicht, dass mein Terminal diese 3 Startup-Dateien überhaupt liest, da ich mit echo $ PATH dasselbe Ergebnis erhalten habe, als ich sie vollständig aus dem Besitzer meiner privaten Benutzer entfernte. Ich bin nicht sicher, was Sie mit dem Aufrufabschnitt meinen. Ich gab "man bash" ein, der zuerst Zeilen mit leeren Zeilen ausgab und dann einige Beschreibungen, die den Aufruf nicht enthalten vor 13 Jahren 0
Wenn Sie dieses "Echo" in die Startdatei schreiben und das Terminal es beim Start ausgedruckt hat, wird es verarbeitet. Stellen Sie im Skript, in dem Sie mysql zum Pfad hinzufügen, dem Befehl "echo XYZZY" voran und setzen Sie "echo $ PATH" dahinter. vor 13 Jahren 0
Vielen Dank, paxdiablo, für Ihre schnelle Antwort. Ich habe nicht einmal das getan, was Sie mir zuletzt gesagt haben, aber ich entfernte einfach das Skript HELLO, I AM HERE aus meinen Startskriptdateien und verengte es auf das .bash_profile, aus dem gelesen wird. Die gute Nachricht ist, dass meine MySQL-Befehle jetzt funktionieren, nachdem sie alle vollständig entfernt wurden. Das Problem ist jedoch, dass ich keine Ahnung habe, warum es jetzt funktioniert, da ich dasselbe Skript wie zuvor habe. Ich habe meinen Computer nicht einmal neu gestartet. Ich habe gerade das Echo XYZZY und das Echo $ PATH in .bash_profile eingegeben und erhalte es vor 13 Jahren 0
XYZZY / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin: / usr / X11 / bin Die Eingabe von echo $ PATH ruft immer noch dasselbe hervor Vor. Das heißt, ich sehe das MySQL-Verzeichnis noch nirgends. Dies ist momentan mein .bash_profile: echo XYZZY echo $ PATH export PATH = / usr / local / bin: / usr / local / sbin: / usr / local / mysql / bin: $ PATH [[-s "$ HOME / .rvm / scripts / rvm "]] &&. "$ HOME / .rvm / scripts / rvm" # Dadurch wird RVM in eine Shell-Sitzung geladen. Es ist noch beunruhigender, dass ich anscheinend nicht die gleichen Ergebnisse wie beim Entfernen Ihrer beiden Zeilen reproduzieren kann. Ich ... . vor 13 Jahren 0
bash: Befehl nicht erneut gefunden, wenn ein MySQL-Befehl eingegeben wurde, aber später, wenn ich readd, resave, entferne, resave, funktioniert es wieder von vorn! Es scheint einen eigenen Geist zu haben, auf Kosten meines Geistes! vor 13 Jahren 0
2
Cal30

Mein Problem war das Vorhandensein eines .bash_profile, also habe ich meine Änderungen vorgenommen, indem ich dort modifiziert habe. Alles, was zuvor gemacht wurde, war das Einrichten meines JAVA_HOME und eines GROOVY_HOME ... also fügte ich meine Änderungen am Ende dieser Datei hinzu und jetzt funktioniert alles bestens.

Vielen Dank!