[英]When calling script from another script in bash shell, how do I pass prefixed arguments to the called script from calling script?
我有兩個腳本,其中script1接受如下所示的前置參數(我正在使用大小寫,使用shift函數轉換參數並根據需要分配它們)這是我通常如何調用script1的方式:
script1 --env [env] --db [db] --table [table] --location [location]
這就是我遍歷script1中的參數的方式:
while [ "$#" -gt 0 ]
do
case "$1" in
--env | --environment)
shift
envie="$1"
;;
--db)
shift
db="$1"
;;
--table)
shift
table="$1"
;;
--tableLocation)
shift
tableLoc="$1"
;;
esac
shift
done
我的第二個腳本將上述腳本與parameters(dynamic)一起調用,但我在執行時遇到了麻煩。 我現在正在嘗試這種方式。 我想調用script1並考慮是否已創建表的狀態(我認為返回代碼會有所幫助)。
env=env1
db=database1
table=table1
tablelocation=tablelocation1
#call script1
`source script1 --env $env --db $db --table $table1 --tableLocation $tablelocation`
我在此行看到“找不到命令”錯誤(沒有語法錯誤),請讓我知道是否可以用帶前綴的參數調用script1。
您不需要回勾。
env=env1
db=database1
table=table1
tablelocation=tablelocation1
#call script1
script1 --env "$env" --db "$db" --table "$table1" --tableLocation "$tablelocation"
如果要保存結果,則僅使用倒鈎。
確保script1是可執行文件( chmod +x
),並且目錄是您的PATH
。
您的腳本僅處理第一個參數/值對。 您需要在仍然有剩余參數的情況下循環,例如:
while [[ $# -ge 1 ]]; do
case "$1" in
--env | --environment)
shift
envie="$1"
;;
--db)
shift
db="$1"
;;
--table)
shift
table="$1"
;;
--tableLocation)
shift
tableLoc="$1"
;;
*)
echo "invalid argument: $1"
exit 1
;;
esac
shift # shift out the consumed value
done
如果要重用初始參數, 請先將它們存儲在數組中, 然后再移出它們:
initialArgs=( "$@" )
while [ "$#" -gt 0 ]; do
: ...processing here...
shift
done
source script1 "${initialArgs[@]}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.