包裝另外命令的參數巴什 - 包裝另外命令的參數
我有一個命令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
對於這兩種工具都很常見,在調用tool1.sh
之前,也可以使用tool2
。因此,在此示例中,--user
必須明確傳遞給tool1
,這要歸功於數組OTHERS
。
我想知道處理這種參數冗餘的可能和/或替代方法。一種方法可以幫助我打包另一個工具的預期參數/選項,而不必複製/粘貼關於分析這些冗餘參數/選項的行。
爲什麼不使用'getopt'內建函數? – jehutyy
關於可移植性問題。 'getopt'不是標準化的。 'getopts'然而不支持長選項。 – kaligne
如果一個選項在第二個腳本中,但不是第一個腳本,該怎麼辦?同樣,如果兩個腳本都可以對參數進行操作,它是多餘的? – 123