我只是想知道是否有来源文件,然后再次在轨道源中删除文件?
我在我的bash脚本上使用https://github.com/renatosilva/easyoptions,我在主脚本上采购easyoption.sh并且工作正常。但是当我有其他脚本从主脚本稍后加载时,我想要easyoptions.sh来源,并且--help应该在最后加载的文件上工作。
示例:
test.sh
#!/bin/bash
## EasyOptions Sub Test
## Copyright (C) Someone
## Licensed under XYZ
## -h, --help All client scripts have this, it can be omitted.
script_dir=$(dirname "$BASH_SOURCE")
# source "${script_dir}/../easyoptions" || exit # Ruby implementation
source "${script_dir}/easyoptions.sh" || exit # Bash implementation, slower
main.sh
#!/bin/bash
## EasyOptions Main
## Copyright (C) Someone
## Licensed under XYZ
## Options:
## -h, --help All client scripts have this, it can be omitted.
## --test This loads test.sh.
script_dir=$(dirname "$BASH_SOURCE")
# source "${script_dir}/../easyoptions" || exit # Ruby implementation
source "${script_dir}/easyoptions.sh" || exit # Bash implementation, slower
if [[ -n "$test" ]];then
source "${script_dir}/test.sh"
fi
现在,当我尝试 ./main.sh --help 它会显示
EasyOptions Main
Copyright (C) Someone
Licensed under XYZ
Options:
-h, --help All client scripts have this, it can be omitted.
> --test This loads test.sh.
现在我想在下面工作 ./main.sh --test --help 它应该输出
EasyOptions Sub Test
Copyright (C) Someone
Licensed under XYZ
-h, --help All client scripts have this, it can be omitted.
但它始终显示main.sh帮助
答案 0 :(得分:1)
main.sh
当source easyoptions.sh
时,它会解析所有命令行选项(包括--help
和--test
)。稍后当您source test.sh
时, easyoptions 将无法解析(即它不会看到--help
)。您可以在echo "$@"
之前添加source test.sh
来验证这一点。
答案 1 :(得分:1)
正如@pynexj所说,"当您使用easyoptions.sh时,它将解析所有命令行选项" 所以你需要以下步骤:
1.您需要检查主要流程中的参数:
1.1如果第一个参数是--help(第一个参数表示$ 1,而不是$ 0"文件名"),则显示主帮助,
1.2如果第一个参数是--test,则加载test.sh并将其他参数传递给child。
这是一个简单的例子,将main.sh的参数传递给child(proc.sh)。
main.sh:
first
proc.sh:
echo "main:"
echo $1
echo $2
source ./proc.sh $2
运行cmd时
echo "proc:"
echo $1
输出:
./main.sh test help
你可以看到,main.sh的第二个参数传递给了孩子