可能的“合并”命令嗎?這是完整而長的“版本”:
#!/bin/bash
function test {
docker_container_proxy_name="cloudflared"
real_domain_of_cloudflared="https://([a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60}).trycloudflare.com"
docker_container_1_uri_outside="$(docker logs ${docker_container_proxy_name}1 2>&1 | grep -Eo $real_domain_of_cloudflared | tail -n 1)"
docker_container_2_uri_outside="$(docker logs ${docker_container_proxy_name}2 2>&1 | grep -Eo $real_domain_of_cloudflared | tail -n 1)"
docker_container_3_uri_outside="$(docker logs ${docker_container_proxy_name}3 2>&1 | grep -Eo $real_domain_of_cloudflared | tail -n 1)"
}
test
變成這樣:
#!/bin/bash
function test {
docker_container_proxy_name="cloudflared"
real_domain_of_cloudflared="https://([a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60}).trycloudflare.com"
command="$(docker logs ${docker_container_proxy_name} 2>&1 | grep -Eo $real_domain_of_cloudflared | tail -n 1)"
docker_container_1_uri_outside="${command}1"
docker_container_2_uri_outside="${command}2"
docker_container_3_uri_outside="${command}3"
}
test
命令簡化
uj5u.com熱心網友回復:
變數用于存盤資料,而不是可執行代碼。通常,存盤可執行代碼的最佳方式是在函式中:
#!/bin/bash
get_container_uri() {
docker_container_proxy_name="cloudflared"
real_domain_of_cloudflared="https://([a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60}).trycloudflare.com"
docker logs "${docker_container_proxy_name}${1}" 2>&1 | grep -Eo "$real_domain_of_cloudflared" | tail -n 1
}
docker_container_1_uri_outside="$(get_container_uri 1)"
docker_container_2_uri_outside="$(get_container_uri 2)"
docker_container_3_uri_outside="$(get_container_uri 3)"
請注意,該函式只是docker logs ...直接運行命令而不是捕獲其輸出;這樣命令的輸出就變成了函式的輸出,這正是我們想要的。
此外,一些通用的腳本建議:您應該(幾乎)總是將變數參考放在雙引號中(例如grep -Eo "$real_domain_of_cloudflared"),以防止 shell 以意想不到的方式決議它們。function關鍵字是非標準的;定義函式的標準方法是()在名稱后面加上(就像我在這里所做的那樣)。不要test用作函式的名稱,因為這是一個相當重要的內置命令的名稱,覆寫它可能會破壞其他東西。
shellcheck.net會指出其中的一些(以及許多其他常見錯誤)。我建議通過它運行您的腳本并修復它指出的內容。
uj5u.com熱心網友回復:
幾乎正確:
建議:
#!/bin/bash
docker_container_proxy_name="cloudflared"
real_domain_of_cloudflared="https://([a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60})(-[a-z0-9]{1,60}).trycloudflare.com"
function command {
echo "$(docker logs "${docker_container_proxy_name}$1" 2>&1 | grep -Eo "$real_domain_of_cloudflared" | tail -n 1)"
}
function test {
docker_container_1_uri_outside=$(command 1)
docker_container_2_uri_outside=$(command 2)
docker_container_3_uri_outside=$(command 3)
}
test
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467883.html
上一篇:bash中變數的簡化
下一篇:bash腳本中的引數
