Насколько я понимаю, когда я выполняю скрипт внутри оболочки BASH с использованием синтаксиса, подобного $ ./myscript.sh
, запускается вспомогательная оболочка, и код запускается в этой оболочке, при этом вывод STDOUT и STDERR печатается в моей оболочке, STDIN берется из моей оболочки. Вот как скрипт интерактивен.
Верхняя строка файла «myscript» — это #!/bin/bash
, это указывает интерпретатор, который будет использоваться для выполнения синтаксиса в файле сценария.
Если я использую синтаксис source myscript.sh
, код в моем скрипте "подтягивается" к моей текущей среде и выполняется там, а не во вспомогательной оболочке. Я не могу запустить следующий код в сценарии, который я вызываю с помощью $ ./myscript.sh
и который влияет на мою текущую оболочку:
#!/bin/bash
PS1='`
if [ $? -eq 0 ];
then echo -n "\[\033[00;35m\]\u\[\033[01;32m\]@\[\033[00;35m\]\h\[\033[00;32m\](\[\033[01;35m\]\W\[\033[01;32m\])\[\033[00;32m\]\$";
else echo -n "\[\033[00;35m\]\u\[\033[01;31m\]@\[\033[00;35m\]\h\[\033[01;31m\](\[\033[35m\]\W\[\033[31m\])\[\033[00;31m\]\$";
fi`\[\033[0m\]'
Если я отброшу #!/bin/bash
и использую source
, этот скрипт изменит мою командную строку. Можно ли организовать его в сценарии таким образом, чтобы я мог вызвать его с помощью $ ./myscript.sh
, и он внесет изменения в мою текущую оболочку, а не в подоболочку?