Ich benutze das Mac-Terminal mit einer Hand voll Registerkarten, die jeweils einem anderen Arbeitsverzeichnis zugeordnet sind. Ich habe es so konfiguriert, dass neue Fenster mit demselben Arbeitsverzeichnis geöffnet werden. Wenn ich Terminal beende und neu starte, werden alle Registerkarten neu erstellt, ihre Namen, und es wird mir sogar die letzte Ausgabe im Fenster angezeigt, aber das Benutzerverzeichnis wird beibehalten und das neueste Arbeitsverzeichnis der einzelnen Registerkarten wird nicht wiederhergestellt.
Was mache ich falsch? Kann dies durch eine Einstellung in der verursacht werden ~/.bash_profile
?
Antworten:
(Als Referenz sprechen wir über die Resume-Funktion von Mac OS X Lion 10.7 und höher.)
Terminal stellt das Arbeitsverzeichnis automatisch wieder her, wenn Sie die Standardshell bash verwenden. Wenn Sie eine andere Shell verwenden, müssen Sie den Code anpassen
/etc/bashrc
, um eine Escape-Sequenz für die Übermittlung des Arbeitsverzeichnisses an Terminal zu senden, damit das Verzeichnis später für Resume wiederhergestellt werden kann. Wenn Sie zsh verwenden, lesen Sie meine Antwort auf Resume Zsh-Terminal (OS X Lion) , in der ich den entsprechenden Code für zsh einfüge.Wenn Sie eine benutzerdefinierte Einstellung haben
~/.bash_profile
oder~/.bashrc
sicherstellen müssen, dass Sie das Standardverhalten nicht durch Ändern/etc/bashrc
der Anpassungen rückgängig machen . Insbesondere wird diePROMPT_COMMAND
Umgebungsvariable so festgelegt, dass die Escape-Sequenz bei jeder Eingabeaufforderung gesendet wird. Wenn Sie diese Variable anpassen, müssen Sie dem aktuellen Wert ein Präfix voranstellen oder den Code anhängen, z.Außerdem sollte im Allgemeinen
~/.bash_profile
Folgendes ausgeführt werden~/.bashrc
:quelle
.bashrc
(obwohl ich keine Anpassung der Eingabeaufforderung feststellen konnte. Jetzt gehe ich wie folgt vor: 1. Öffnen Sie ein neues Terminalfenster (wird im Ausgangsverzeichnis meines Benutzers geöffnet) 2. CD-Dokumente 3. Beenden Sie Terminal 4. Öffnen Sie Terminal 5 Das Fenster wird erneut geöffnet und zeigt die Ausgabe des Verzeichniswechsels an, befindet sich jedoch immer noch im Ausgangsverzeichnis des Benutzers.~/.bash_profile
,~/.bash_login
und~/.profile
.~/.bashrc
gemäß Ihrem Vorschlag in Ihrer Antwort ausgeführt./etc/bashrc
scheint durch ein Installationsskript oder was auch immer optimiert worden zu sein. Es gab eine/etc/bashrc.orig
, die eine zusätzliche Konfiguration enthielt (von der ich annehme , dass sie das ursprüngliche Setup ist) gist.github.com/3273170 . Füge das wieder zu den/etc/bashrc
Sachen hinzu, die wieder wie erwartet funktionieren. Vielen Dank für Hilfe und Geduld!Wenn Sie Bash-It verwenden, besteht möglicherweise das Problem,
$PROMPT_COMMAND
dass Sie von Bash-It überschrieben werden.Wie bereits erwähnt, wird es von OS X verwendet, um cwd in neuen Registerkarten wiederherzustellen. Bash sollte es Werte anhängen, nicht überschreiben.
Ein Workaround für den Moment wäre es jedoch, die folgende Zeile zu Ihrer hinzuzufügen
~/.bash_profile
Weitere Informationen finden Sie im Issue Tracker unter https://github.com/revans/bash-it/issues/240
Und die Apple-Referenz dafür https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html
quelle
Ich habe einen Blog-Beitrag darüber verfasst, wie das mit csh / tcsh gemacht werden kann, bevor ich diese Antwort gefunden habe. Wenn jemand hierher kommt und nach einer Lösung für diese Muscheln sucht, dann ist es hier:
Fügen Sie das Ihrem
.cshrc
oder.tcshrc
entsprechend hinzu. (Die äußere if-Anweisung ist erforderlich, um einen Fehler bei der Remote-Anmeldung wie bei ssh zu vermeiden. Sie muss aufgrund der Variablenerweiterungsregeln in tcsh eine separate Anweisung sein.)Wie die integrierte Bash-Unterstützung von Apple verwendet diese Lösung keine anderen externen Programme als
printf
auf Kosten von nur entweichenden Speicherplätzen. Wenn Sie anderen Sonderzeichen entkommen müssen, müssen Sie etwas härter arbeiten, um eine umfassendere Lösung zu finden.quelle