Может быть, я смотрю на это неправильно ... Но вот я то, что я пытаюсь сделать. Я делаю большую часть своей работы с Java, но просто переключился на среду Unix (Bash). Я делаю это:
[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash
ls2(){
echo "Hello World"
}
ls3(){
echo "Testing"
}
echo "this is a test"
ls2 # this calls a function
[~/Desktop/bashPlay]% myFunc
this is a test
Hello World
Но у меня есть две функции в моем файле, и я хочу иметь возможность вызывать их отдельно от командной строки. Т.е.: myFunc.ls2()
или даже просто ls2
. Я знаю, что могу добавить функции в свой .bashrc
файл, но есть ли другой способ выполнить эти функции, не добавляя их в свой .bashrc
файл?
Другой подход заключается в создании сценария с именем
functions.sh
(например, в~/bin
каталоге).В этом сценарии вы добавляете все ваши определения личных функций (скажем, каждый раз, когда вы добавляете функцию, вы добавляете ее в этот файл ...)
Наконец, вам просто нужно добавить
source ~/bin/functions.sh
строку в ваш.bashrc
файл. Таким образом, вы сможете вызывать их из командной строки, вы.bashrc
останетесь чистыми, и у вас будет определенное место для ваших личных функций.источник
Если вы похожи на меня, вы не хотите загромождать свое окружение функциями. У вас также есть группа функций, которые связаны друг с другом в смысле того, что они делают, поэтому имеет смысл поместить их в один и тот же файл сценария. (Я знаю, что папка с несколькими файлами может служить той же цели). Вот возможное решение, которое позволяет вам вызывать определенную функцию в сценарии:
источник
source
потому, что он может обрабатывать две функции с одинаковыми именами в двух разных файлах sh. Я усовершенствовал его для обработки произвольного числа параметров, заменив его$1 $2 $3 $4 $5
наFUNC_CALL=$1; shift; $FUNC_CALL "$@"
"$@"
. PS Ваш подход на самом деле неверен; последняя часть должна быть"$FUNC_CALL" "$@"
(т.е.$FUNC_CALL
должна быть в кавычках)."$FUNC_CALL"
?Оператор точки или
source
встроенныйbash
аналогиченimport
оператору в Java.Вы можете прочитать больше о точечном операторе или
source
встроенном .источник