目標:我正在嘗試創建docker ps
的交互式版本。基本上,具有每行是一個「菜單」,使得用戶可以:啓動,停止,ssh等BASH - 分析帶有特殊字符的字符串
實施例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1. bf4a9c7de6bf app_1 "docker-php-entryp..." 7 days ago Up About an hour 443/tcp, 0.0.0.0:80->80/tcp, 9000/tcp app_1
2. 26195f0764ce app_2 "sh /var/www/html/..." 10 days ago Up About an hour 443/tcp, 127.0.0.1:8000->80/tcp app_2
當選擇(1/2等)會有一個選項菜單在選定的容器上執行各種操作。
問題:我似乎無法弄清楚如何解析出docker ps
命令的每一行,以便我將Container ID和其他值作爲數組元素。
至今代碼:
list=`docker ps`
IFS=$'\n' array=($list)
for index in ${!array[@]}
do
declare -a 'a=('"${array[index]}"')'
printf "%s\n" "${a[@]}"
done
結果:
CONTAINER
ID
IMAGE
COMMAND
CREATED
STATUS
PORTS
NAMES
/usr/bin/dockersh: array assign: line 9: syntax error near unexpected token `>'
/usr/bin/dockersh: array assign: line 9: `bf4a9c7de6bf app_1 "docker-php-entryp..." 7 days ago Up About an hour 443/tcp, 0.0.0.0:80->80/tcp, 9000/tcp app_1'
我對在循環內部聲明有困惑嗎?如果它總是'a'數組,爲什麼要多次聲明它?另外,沒有看到任何數據(就像其他人一樣,我沒有安裝Docker),這使得很難知道一個好的答案來提供? – grail
請看看:http://www.shellcheck.net/ – Cyrus
@grail - 數據就是你在我的問題的示例塊中看到的內容。至於聲明聲明,我的想法是我正在處理2個數組: 1。行數組 2.每行「列」數組 – aniculescu