簡體   English   中英

從bash shell中的另一個腳本調用腳本時,如何從調用腳本將前綴參數傳遞給被調用腳本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM