Как вы вызываете функцию, определенную в .bashrc из оболочки?
В моем .bashrc у меня есть функция hello:
function hello() {
echo "Hello, $1!"
}
Я хочу иметь возможность вызвать hello() из оболочки следующим образом:
$ hello Lloyd
И получим вывод:
> Hello, Lloyd!
Какой трюк?
(Реальная функция, которую я имею в виду, сложнее, конечно.)
EDIT: Это ДЕЙСТВИТЕЛЬНО вызвано синтаксической ошибкой в функции, я думаю!: (
function coolness() {
if[ [-z "$1"] -o [-z "$2"] ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}
Ответы
Ответ 1
Тест в вашей функции не будет работать - вы не должны иметь скобки вокруг предложений -z, и должно быть пробел между if и открытой скобкой. Он должен гласить:
function coolness() {
if [ -z "$1" -o -z "$2" ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}
Ответ 2
Вы можете экспортировать функции. В файле ~/.bashrc
после определения функции добавьте имя функции export -f functionname
.
function hello() {
echo "Hello, $1!"
}
export -f hello
Тогда функция будет доступна в приглашении оболочки, а также в других сценариях, которые вы вызываете оттуда.
Обратите внимание, что нет необходимости экспортировать функции, если они не будут использоваться в дочерних процессах ("также" в предыдущем предложении). Как правило, даже тогда лучше source
функцию в файл, в котором она будет использоваться.
Редактировать:
Скобки в условных выражениях Bash - это не скобки, а команды. Они должны иметь пространство вокруг них. Если вы хотите сгруппировать условия, используйте скобки. Вот твоя функция:
function coolness() {
if [ -z "$1" -o -z "$2" ]; then
echo "Usage: $0 [sub_package] [endpoint]";
exit 1;
fi
echo "Hi!"
}
Лучший способ написать это условие:
if [[ -z "$1" || -z "$2" ]]; then
потому что двойные скобки предоставляют больше возможностей, чем одиночные.
Ответ 3
Включите в script строку
source .bashrc
попробуйте с исходной конструкцией, она должна работать!
Ответ 4
Любые изменения, внесенные в .bashrc
, вступят в силу только в новом терминальном сеансе. Если вы хотите применить изменения к текущему терминальному сеансу, вы должны дать команду оболочке перечитать .bashrc
. Кратчайший путь к этому - использовать .
команда, которая является синонимом к source
:
[[email protected]]$ . ~/.bashrc
Ответ 5
$ source .bashrc
Ответ 6
Это странно; мой fuctin не прекратит работу, пока я не передам его другому экземпляру bash, например так:
Bash Myfunction