Как заставить ksh действовать так, как будто он был вызван как оболочка входа в систему (AIX)?

Как заставить ksh действовать так, как будто он был вызван как оболочка входа в систему (AIX)?

Когда я запускаю kshкоманду, она запускается как Non-Login Shell (как и ожидалось). Я пытаюсь добиться запуска kshкак Login Shell, как это можно сделать с помощью bash.

Просто в качестве справки, bashможет действовать так, как если бы он был вызван как оболочка входа, указав опцию -l. Вот выдержка из страницы руководства bash:

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).

Вот ссылка на страницу руководства, которую я вижу на сервере AIX:

http://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds3/ksh.htm

Существует возможность отключить обработку файла $HOME/.profile(см. цитату ниже), поэтому должен быть способ использовать KornShell в качестве оболочки входа.

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?

Примечания:

Операционная система — AIX иэто все, что у меня есть дляexec. К сожалению, я не могу заменить оболочку следующим предложением:

exec -a ksh path/to/ksh

решение1

Если вы хотите изменить свою оболочку входа, то вы можете использовать chsh(изменить оболочку). Если вы просто хотите запустить экземпляр, kshкоторый ведет себя как оболочка входа, то читайте дальше.

kshведет себя как оболочка входа в систему, если первый символ аргумента 0 — -; если вы находитесь в ksh( ksh93или mksh, не ksh88или pdksh), zsh, yashили bash, то

exec -a -ksh /path/to/ksh [optional arguments]

заменит текущую оболочку на экземпляр оболочки Korn, которая ведет себя как оболочка входа в систему. (Если вы находитесь в bashили zsh, то exec -l /path/to/kshэто короче и имеет тот же эффект.)

Если ни одна из этих оболочек недоступна, вы также можете попробовать perl:

perl -e 'exec {"ksh"} "-ksh"'

Связанный контент