目标:我正在尝试创建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