Подтвердить что ты не робот

Как вы вызываете функцию, определенную в .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!"
}
4b9b3361

Ответ 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