【发布时间】:2017-04-27 08:52:09
【问题描述】:
包装另一个命令的参数
我有一个命令 tool1 以这种方式解析参数:
#!/usr/bin/env bash
# ...
while [[ $# -ge 1 ]]
do
key="$1"
case $key in
-o|--option)
OPT="$2"
shift
;;
-u|--user)
USR="$2"
shift
;;
-*)
echo -e "Unrecognized option: \"$key\"" && exit 1
;;
*)
OTHERS+=("$1")
;;
esac
shift
done
# ...
我有tool2 调用tool1。因此tool2 必须将参数传递给tool1。它可能还需要处理相同的参数(--user)
tool2 看起来像:
#!/usr/bin/env bash
# ...
while [[ $# -ge 1 ]]
do
key="$1"
case $key in
-O|--option2)
opt2="$2"
shift
;;
-u|--user)
USR="$2"
OTHERS+=("-u $2")
shift
;;
-*)
echo -e "Unrecognized option: \"$key\"" && exit 1
;;
*)
OTHERS+=("$1")
;;
esac
shift
done
## Call tool1 with other parameters to pass
bash tool1.sh ${OTHERS[@]}
# ...
总结
--option2 是仅由 tool2 使用的选项。
--user 对这两种工具都是通用的,tool2 也可以在调用 tool1.sh 之前使用。因此,在此示例中,--user 必须显式传递给 tool1,这要归功于数组 OTHERS。
我想了解处理此类参数冗余的可能和/或替代方法。一种方法可以帮助我包装另一个工具的预期参数/选项,而无需复制/粘贴有关解析此类冗余参数/选项的行。
【问题讨论】:
-
你为什么不使用
getopt内置? -
针对可移植性问题。
getopt没有标准化。getopts但是不支持长选项。 -
如果选项在第二个脚本中但不在第一个脚本中怎么办?另外,如果两个脚本都可以作用于一个参数,那么它是多余的吗?
-
值得edit提出您的问题,以澄清 tool1 是否是在 tool2 之外也被调用的独立命令。如果tool1只被tool2调用,我会把它写成tool2中的一个函数。
-
@123 解析是多余的。我的问题更像是一时兴起做一些优雅的事情。
标签: bash shell parameters