AAa*_*Aaa 104 linux bash scripting
我有一个具有一些功能的脚本.
我可以直接从命令行运行其中一个功能吗?
像这样的东西?
myScript.sh func()
Run Code Online (Sandbox Code Playgroud)
sda*_*aau 207
好吧,虽然其他答案是正确的 - 你当然可以做其他事情:如果你有权访问bash脚本,你可以修改它,并简单地放在特殊参数的末尾"$@"- 这将扩展到命令行的参数你指定,因为它是"独自"的shell将尝试逐字调用它们; 在这里你可以指定函数名作为第一个参数.例:
$ cat test.sh
testA() {
echo "TEST A $1";
}
testB() {
echo "TEST B $2";
}
"$@"
$ bash test.sh
$ bash test.sh testA
TEST A
$ bash test.sh testA arg1 arg2
TEST A arg1
$ bash test.sh testB arg1 arg2
TEST B arg2
Run Code Online (Sandbox Code Playgroud)
对于抛光,您可以先验证命令是否存在并且是一个函数:
# Check if the function exists (bash specific)
if declare -f "$1" > /dev/null
then
# call arguments verbatim
"$@"
else
# Show a helpful error
echo "'$1' is not a known function name" >&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 55
如果脚本只定义了函数而不执行任何其他操作,则可以先使用sourceor .命令在当前shell的上下文中执行脚本,然后只需调用该函数.有关help source更多信息,请参阅
小智 30
以下命令首先在上下文中注册该函数,然后调用它:
. ./myScript.sh && function_name
Run Code Online (Sandbox Code Playgroud)
Sor*_*gal 13
简而言之,没有.
您可以使用source(help source详细信息)将脚本中的所有函数导入到您的环境中,然后允许您调用它们.这也有执行脚本的效果,所以要小心.
无法从shell脚本调用函数,就像它是共享库一样.
Iva*_*van 12
使用 case
#!/bin/bash
fun1 () {
echo "run function1"
[[ "$@" ]] && echo "options: $@"
}
fun2 () {
echo "run function2"
[[ "$@" ]] && echo "options: $@"
}
case $1 in
fun1) "$@"; exit;;
fun2) "$@"; exit;;
esac
fun1
fun2
Run Code Online (Sandbox Code Playgroud)
该脚本将运行函数 fun1 和 fun2,但如果您使用选项 fun1 或 fun2 启动它,它将仅运行带有 args(如果提供)的给定函数并退出。用法
$ ./test
run function1
run function2
$ ./test fun2 a b c
run function2
options: a b c
Run Code Online (Sandbox Code Playgroud)