Получение внешнего значения PS1 внутри bash-скрипта - PullRequest
2 голосов
/ 07 февраля 2011

Мне нужно получить значение переменной PS1 внутри bash-скрипта.

Я знаю, что выполнение сценария с точкой перед тем, как bash передает переменные env в сценарий, но мне нужно получить PS1 независимо от того, как он вызывается, поскольку я не верю, кто будет запускать сценарий. 1005 *

Как мне это получить?

Обновление : переменная была экспортирована в /etc/profile, но я не могу ее получить:

[ Test ] root@myhost:~# export | grep PS1
declare -x PS1="[ Test ] \\u@\\h:\\w\\\$ "
[ Test ] root@myhost:~# cat test.sh 
echo $PS1
[ Test ] root@myhost:~# bash test.sh 

Я не получаю вывод от последней команды.

Ответы [ 3 ]

7 голосов
/ 19 апреля 2011

Запустите ваш тестовый скрипт с помощью 'bash -i';это заставляет его вести себя как оболочка входа в систему и (среди прочего) устанавливает PS1.

Если ваш скрипт будет запускаться как исполняемый файл (.eg ./test.sh), тогда вы также можете указать -i наначальная строка, например:

#!/bin/bash -i

Обновление: Это работает, только если ваш скрипт выполняется напрямую, например,

$ ./test.sh

и не as:

$ bash test.sh

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

$ bash -i test.sh
2 голосов
/ 09 января 2016

5 лет спустя .... потому что я нашел следующее решение, найдя этот вопрос.

Если вы хотите, вы можете использовать флаг -i в заголовке, и кажется, что он сохраняет среду во время сценария, не выполняя его специальным образом. * Т.е. 1003 *

#!/bin/bash -i
echo "$PS1"

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

2 голосов
/ 07 февраля 2011

Эта переменная каким-то образом обрабатывается особым образом в bash (но, например, в AIX или HPUX sh, я знаю, что вы можете получить к ней доступ, даже если она не интерактивна) Он используется только в интерактивной оболочке, поэтому нет возможности получить доступ к его значению при неинтерактивном вызове.

Извините, это не ответ, но так оно и есть ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...