%3F.png)
Wenn ich den Befehl ausführe, ksh
wird er (wie erwartet) als Nicht-Login-Shell ausgeführt. Was ich erreichen möchte, ist die Ausführung ksh
als Login-Shell, wie es mit möglich ist bash
.
Nur als Referenz: bash
Durch Angabe der Option kann es so funktionieren, als wäre es als Login-Shell aufgerufen worden -l
. Hier ist ein Auszug aus der Bash-Manpage:
BASH(1) BASH(1) NAME bash - GNU Bourne-Again SHell . . . OPTIONS . . . -l Make bash act as if it had been invoked as a login shell (see INVOCATION below).
Dies ist der Link zur Manpage, die ich auf dem AIX-Server sehe:
http://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds3/ksh.htm
Es gibt eine Option zum Deaktivieren der Verarbeitung der $HOME/.profile
Datei (siehe Zitat unten), daher muss es eine Möglichkeit geben, die KornShell als Anmelde-Shell zu verwenden.
ksh Command Purpose Invokes the Korn shell. . . . Flags . . . -p Disables the processing of the $HOME/.profile file when you use the shell as a login shell, right?
Anmerkungen:
Das Betriebssystem ist AIX unddas ist alles, was ich habe fürexec
. Leider kann ich die Shell nicht durch den folgenden Satz ersetzen:
exec -a ksh path/to/ksh
Antwort1
Wenn Sie Ihre Login-Shell ändern möchten, können Sie chsh
(change shell) verwenden. Wenn Sie einfach eine Instanz von ausführen möchten, ksh
die sich als Login-Shell verhält, lesen Sie weiter.
ksh
verhält sich wie eine Login-Shell, wenn das erste Zeichen des Arguments 0 ist -
; wenn Sie sich in ksh
( ksh93
oder mksh
, nicht ksh88
noch pdksh), zsh
, yash
oder befinden bash
, dann
exec -a -ksh /path/to/ksh [optional arguments]
ersetzt die aktuelle Shell durch eine Instanz der Korn-Shell, die sich wie eine Login-Shell verhält. (Wenn Sie sich in bash
oder befinden zsh
, exec -l /path/to/ksh
ist kürzer und hat dieselbe Wirkung.)
Wenn keine dieser Shells verfügbar ist, können Sie auch Folgendes versuchen perl
:
perl -e 'exec {"ksh"} "-ksh"'