1

Мне интересно, почему следующий скрипт не будет работать:

#!/bin/bash
read -p 'First lets write PROMPT.SH'
echo '#!/bin/bash'>prompt.sh
echo "export PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '">>prompt.sh
read -p "Change Title and Prompt"
source prompt.sh
echo texttexttext
read -p "Now lets tidy up PROMPT.SH"
rm ./prompt.sh
read -p "That was the program"

То, что я пытаюсь сделать, это изменить заголовок окна, приглашение и цвет текста, которые я обычно могу сделать,

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

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

2 ответа2

0

PS1 отображается только для интерактивных подсказок. Это не имеет ничего общего с приглашением, показанным для read -p . Выполнение bash-скрипта, даже если он читает ввод, не считается интерактивным .

0

Я не совсем ясно, что вы пытаетесь сделать, но я предполагаю, что он устанавливает PS1 для вашей интерактивной оболочки из сценария.  Скажем так, вы не можете этого сделать.  В * nix и Unix-подобных системах характеристики / свойства процесса передаются от родителя к потомку, но никак не наоборот.  Например, если вы установите в PATH значение /foo , а затем запустите скрипт, который пытается запустить bar , он найдет /foo/bar - но если вы измените PATH в скрипте, это не повлияет на вашу интерактивную оболочку. ,  Аналогично для cd и umask . Это отличия от мира командной строки Windows.

Тем не менее, есть ответ, и вы уже знаете это.  Если ваш скрипт (10-строчный) называется andy.sh , то вы сможете получить желаемый эффект, набрав source andy.sh  Но это глупое излишество (если вы не делаете это только для практики написания сценариев); просто положи

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

в drew.sh и введите source drew.sh

Но также alias команду псевдонимов .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .