.bashrc
только читается интерактивными оболочками. (На самом деле это - упрощение: удар является изворотливым в этом отношении. Bash не читает .bashrc
если это - оболочка входа в систему, интерактивная или нет. И существует исключение даже к исключению: если родительский процесс удара rshd
или sshd
, затем удар действительно читает .bashrc
, является ли это интерактивным или нет.)
Положите свои функциональные определения на файл в известном месте и используйте .
(также записанный source
) встроенный для включения того файла в сценарий.
$ cat ~/lib/bash/my_functions.bash
foo () {
…
$ cat ~/bin/myscript
#!/bin/bash
. ~/lib/bash/my_functions.bash
foo bar
Если Вы хотите, можно следовать за функцией автозагрузки ksh. Поместите каждое функциональное определение в файл с тем же именем как функция. Перечислите каталоги, содержащие функциональные определения в FPATH
переменная (разделенный от двоеточия список каталогов). Вот грубое приближение ksh's autoload
который на самом деле сразу загружает функцию вместо по запросу:
autoload () {
set -- "$(set +f; IFS=:;
for d in $FPATH; do
if [ -r "$d/$1" ]; then echo -E "$d/$1"; break; fi;
done)"
[[ -n $1 ]] && . "$1"
}
Это вопрос времени: Bash запускает команду Hello
в фоновом режиме, то он отображает подсказку, чтобы вы ввести новую команду, то команда «Фоновая команда» выход. Когда вы входите в следующую командную строку (пустая командная строка, если вы просто нажимаете Enter ), Bash отображает уведомление о том, что фоновое задание закончилось, затем следующую подсказку.
Вы можете захотеть экспериментировать с помощью сценария, который начинается с спать 3
и начать печатать только после запуска скрипта на заднем плане, чтобы увидеть, что происходит в темпе, вы можете следовать.
Вы можете заставить Bash уведомить вас сразу, когда фоновое задание завершается, устанавливая опцию Notify
с помощью , установлена -B
. Тогда вы увидите:
$ set -b
$ hello &
[1] 12345
$ hello world!
[1]+ Done
Bash не перерезает запрос в этом случае. Вы все еще редактируете командную строку в подсказке, которая появилась до напечатанной фоновой задачи Hello World!
. Вы можете перерисовать текущую строку, нажав ESC 1 Ctrl + L . Возможно, вы захотите связать команду RedRaw-read-Line
в более удобную клавишу; Например, иметь Ctrl + L L RedRaw текущая линия и Ctrl + Alt + l Очистить Экран, добавьте следующие строки в ваш ~ / .InPUTRC
:
"\C-l": redraw-current-line
"\e\C-l": clear-screen
Я не знаю способа сделать Bash RedRaw Princ Prince автоматически. ZSH делает это по умолчанию.