2016-05-17 5 views
0

Ich versuche zu sehen, was die Ausgabe eines Befehls wäre, wenn ich in einer Login-Shell wäre, ohne in eine Login-Shell gehen zu müssen. Ich habe verschiedene Varianten vonBefehl als Login-Shell ausgeführt, ohne eine neue Shell zu starten?

zsh --login -c "alias" 

versucht, aber keiner meiner Aliase wird angezeigt; sind --login und -c inkompatibel?

+1

Beenden Sie Ihre Anmeldedateien vorzeitig (vor dem Festlegen von Aliasnamen), wenn die Shell nicht interaktiv ist. Es funktioniert möglicherweise, aber Sie legen die Aliase nicht fest, sodass Sie sie nicht verwenden können. Versuchen Sie, '-x' zur Befehlszeile hinzuzufügen (vor '-c'). –

+0

Versucht das '-x', dasselbe Ergebnis –

+0

Gut; es ist in sich konsistent. Hast du gesehen, dass deine Aliase gesetzt sind? Wurde '/ etc/zprofile' gelesen? Wurde eine ähnliche Datei gelesen? –

Antwort

0

Um den Unterschied zwischen zsh --login -c "alias" und einer normalen Login-Shell zu testen, können/sollten Sie die Option -x hinzufügen, um zu sehen, was die Shell vorhat.

Wenn ich zsh -x --login -c "alias" ausführen, verarbeitet es /etc/zprofile. Wenn ich zsh -x --login starte, verarbeitet es /etc/zprofile und /etc/zshrc.

ich normalerweise nicht zsh verwenden, so habe ich kein personalisierten Profil oder starte Datei für sie, aber es scheint plausibel, dass es aussehen könnte für (aber in meinem Fall, findet nicht) ~/.zprofile und ~/.zshrc auch.

Ich habe trivial Versionen dieser Dateien:

$ echo "echo in .zprofile" > ~/.zprofile 
$ echo "echo in .zshrc" > ~/.zshrc 

und sicher genug, sie verarbeitet sind. Ferner hat der -c Befehl mit --login die .zprofile verarbeitet aber die .zshrc Datei nicht verarbeitet.

Somit kann unter Verwendung -c "alias" nach dem --login unterdrückt die Verarbeitung von /etc/zshrc und ~/.zshrc. Wenn Sie auch nur so Hingerichteten wollen, müssen Sie etwas verwenden wie:

zsh --login -c "[ -f /etc/zshrc ] && . /etc/zshrc; [ -f ~/.zshrc ] && . ~/.zshrc; alias" 

Mit -x zu debuggen Login Verarbeitung ist oft informativ.

Es ist schön, dass moderne Shells eine Befehlszeilenoption bieten, um Login-Verarbeitung zu induzieren. Ich habe immer noch ein Programm (das ich nicht mehr benutze), das eine Login-Shell auf die altmodische Art und Weise ausführt, indem man eine vor dem Shell-Namen in argv[0] hinzufügt. Die Ausführung von -ksh würde also die Anmeldeverarbeitung auslösen. Das login Programm würde die Login-Shell mit dem - beim Start ausführen.

Verwandte Themen