Bash, выполнить команду, но продолжить интерактивный сеанс - PullRequest
11 голосов
/ 03 января 2011

Я хочу создать псевдоним для pagsh, который немедленно получит мне билет администратора Kerberos.

Проблема в том, что я не могу понять, как задать команду для bash длязапустить, но продолжить выполнение интерактивного сеанса после выполнения команды.

Мой текущий снимок:

alias admin=pagsh -c "bash -c \"kinit xtoth1@ADMIN.META\""

, но bash логически заканчивается сразу после выполнения kinit.Как я могу вставить пользовательскую команду в начало интерактивного сеанса bash?Мне все еще нужно нормально запустить .bashrc, поэтому я не могу использовать --rcfile

Ответы [ 3 ]

10 голосов
/ 03 января 2011

Мой совет - использовать пользовательский файл bashrc с --rcfile, который будет источником вашего .bashrc.

alias admin=pagsh -c "bash --rcfile myrc"

myrc :

source ~/.bashrc
kinit xtoth1@ADMIN.META
2 голосов
/ 27 июня 2013

Если вам нужна только одна или две строки, вы можете использовать функцию классного bash в «Подстановке процесса» [1], чтобы предоставить ее прямо в строке вызова. например (запустить bash в конкретном python virtualenv):

bash --rcfile <(echo '. ./pyvenv/bin/activate')

несколько строк не являются проблемой, а также не используются переменные или помощники:

bash --rcfile <(echo echo "Starting at `date`"; echo cd $HOME)

[1] man bash и найдите «Замена процесса». Обратите внимание, что это поддерживается не на всех системах, но должно работать на всех Linux.

1 голос
/ 26 апреля 2013

Как насчет следования?

alias admin='pagsh -c "bash -c \"kinit xtoth1@ADMIN.META; exec bash\""'

или даже

alias admin='pagsh -c "kinit xtoth1@ADMIN.META; exec bash"'

может работать.(У меня нет рабочей среды openafs, чтобы правильно ее протестировать.)

...