下面是我的脚本,用于运行一些子命令。当我使用./test.sh sub_cmd $APP
运行脚本时,它运行良好。但是,当我像test sub_cmd $APP
一样运行它时,会抛出错误。
我想不使用./
来运行脚本
error :- test: ing: unary operator expected
#!/bin/bash
ProgName=$(basename $0)
APP=${2?Need chart name}
sub_help(){
echo "Usage: $ProgName <subcommand> [options]\n"
}
sub_dep(){
echo "Running 'dep' command."
vi some_path/${APP}/templates/deployment.yaml
}
sub_ing(){
echo "Running 'ing' command."
vi some_path/${APP}/templates/ingress.yaml
}
sub_svc(){
echo "Running 'ing' command."
vi some_path/${APP}/templates/service.yaml
}
subcommand=$1
case $subcommand in
"" | "-h" | "--help")
sub_help
;;
*)
shift
sub_${subcommand} $@
if [ $? = 127 ]; then
echo "Error: '$subcommand' is not a known subcommand." >&2
echo " Run '$ProgName --help' for a list of known subcommands." >&2
exit 1
fi
;;
esac
答案 0 :(得分:2)
您需要运行“ test.sh”而不是“ test”。
test sub_cmd $APP
您实际正在运行的是test命令,该命令位于路径的lib目录之一中。
如果您输入
which test
您可以看到要运行的命令/脚本/程序。
当您在命令前添加相对路径(例如./)或绝对路径(即以/开头)时,bash会在该特定文件夹中查找该命令。如果省略该路径,则它将搜索环境变量$ PATH中列出的目录并执行它遇到的第一个目录。 which命令执行相同的操作,只是列出了脚本/程序而不是执行它。