我的腳本是接受一個引數dms。獲得后,它會創建多個變數,用作 的引數retry_cli。我遇到的問題是位置引數的使用。如何解決腳本創建變數并將它們用作每個函式運行的引數的機制?
目前似乎該函式正在使用觸發腳本時注入的位置引數,而不是在其中創建的位置引數。檔案表明兩個$1位置引數(用于腳本和函式)不應該是一個問題。
dms_name=$1
aws_region="us-east-1"
dms_arn=`aws dms describe-replication-tasks --filter Name=replication-task-id,Values="$dms_name" --query=ReplicationTasks[0].ReplicationTaskArn --output text --region "$aws_region"`
ri_arn=`aws dms describe-replication-tasks --filter Name=replication-task-id,Values=$dms_name --query=ReplicationTasks[0].ReplicationInstanceArn --region "$aws_region"`
target_arn=`aws dms describe-replication-tasks --filter Name=replication-task-id,Values=$dms_name --query=ReplicationTasks[0].TargetEndpointArn --region "$aws_region"`
ri_status=`aws dms describe-connections --filter Name=replication-instance-arn,Values=$ri_arn --query=Connections[0].Status --region "$aws_region"`
target_status=`aws dms describe-connections --filter Name=endpoint-arn,Values=$target_arn --query=Connections[0].Status --region "$aws_region"`
retry_cli () {
local max_retry=100
local counter=0
local sleep_seconds=15
local aws_region="us-east-1"
until [[ $1 =~ "success" ]]
do
status=`aws dms describe-connections --filter Name=$2,Values="$3" --query=Connections[0].Status --region "$aws_region"`
[[ counter -eq $max_retry ]] && echo "connection status of $3 failed!" && exit 1
((counter ))
sleep $sleep_seconds
done
echo "connection for $3 OK!"
}
retry_cli "$ri_status" replication-instance-arn "$ri_arn"
retry_cli "$target_status" endpoint-arn "$target_arn"
echo startting dms
aws dms start-replication-task --replication-task-arn "$dms_arn" --start-replication-task-type resume-processing --region "$aws_region"
echo done
預期行為:
- 腳本運行:
sh script.sh dms_name - 每個
dms_變數都被填充 retry_cli用 3 個引數呼叫。當$*_status不是success字串時,則該函式必須獲取最新status的aws cli命令并重復它,只要它回傳success- 轉到第二個函式呼叫
uj5u.com熱心網友回復:
我假設函式的until回圈正在做的是重復運行命令,直到它收到包含字串的狀態訊息success。
對于第一遍,until回圈測驗$1字串的函式的第一個輸入引數 ( ) success。
until回圈的后續傳遞仍在測驗函式的第一個輸入引數 ( $1) 的字串success。
我猜對于后續的傳遞,您想要做的是測驗最新status的字串success;如果是這種情況,那么可能會有一個小的代碼更改:
retry_cli () {
...
local status="$1" # new line
until [[ "${status}" =~ "success" ]] # modified line
do
....
done
...
}
如果這不能解決問題,那么 OP 可能希望提供有關該問題的更多詳細資訊(例如,回圈永不退出,回圈永不進入,???)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/351566.html
