我经常执行这个命令。
load_module virtuoso
它在终端上运行良好。
所以我把它放在一个名为的 bash 脚本中load.sh
,该脚本是可执行的。
#!/bin/bash
echo "Hello"
load_module virtuoso
但是当我尝试使用执行它时./load.sh
,它给出了这个错误,
./load.sh: line 3: load_module: command not found
我尝试通过输入echo "hello"
“load.sh”文件来调试它。hello
当我执行该文件时,它会打印在屏幕上,所以我猜这个脚本运行正常。我不知道还能尝试什么。谢谢
以下是摘要。
een212023@hertz:~/iec_lab1$ ls -la load.sh
-rwxr-xr-x 1 een212023 nogroup 46 Aug 19 17:59 load.sh
een212023@hertz:~/iec_lab1$ cat load.sh
#!/bin/bash
echo "Hello"
load_module virtuoso
een212023@hertz:~/iec_lab1$ load_module virtuoso
een212023@hertz:~/iec_lab1$ ./load.sh
Hello
./load.sh: line 3: load_module: command not found
een212023@hertz:~/iec_lab1$
een212023@hertz:~/iec_lab1$ type -a load_module
load_module is a function
load_module ()
{
if already_loaded $1; then
return 0;
fi;
load_vars_of_module $1;
declare -a required_here=("${additional_required[@]}");
declare -a conflicts_here=("${additional_conflicts[@]}");
load_required_modules ${required_here[*]};
unload_conflicting_modules ${conflicts_here[*]};
load_vars_of_module $1;
init_all_paths;
add_paths ${additional_path[*]};
add_ldpaths ${additional_ldpath[*]};
add_manpaths ${additional_manpath[*]};
add_lmpaths ${additional_lmpath[*]};
exportvars ${additional_exports[*]};
newaliases "${additional_aliases[@]}";
unset ${!additional*};
export MODULES=${MODULES}:$1
}
答案1
正如其他人所说,您需要在加载脚本时定义您的函数。
我通过一个脚本文件来实现这一点,该文件包含我在脚本中常用的“常用”函数。我们称这个文件为/path/to/bash-common.sh
- 在您的例子中,这个脚本将包含函数load_module
。
然后我要做的是在所有其他脚本中引用这个通用脚本,因此我的所有脚本都是这样开始的:
#!/bin/bash
source /path/to/bash-common.sh
就你的情况而言,你的load.sh
将是:
#!/bin/bash
source /path/to/bash-common.sh
echo "Hello"
load_module virtuoso
如果您愿意的话,您也可以这样source /path/to/bash-common.sh
做。.bashrc
通过这种方式,您只需在一个地方维护所有自定义函数,并且可以在任何地方访问此文件(如果您在 中获取它,则包括在交互式 shell 中.bashrc
)。