목표 : 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
명령의 각 행을 구문 분석하여 컨테이너 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'배열 인 경우 왜 두 번 이상 선언해야합니까? 또한, 데이터를 보지 않고 (다른 사람들과 같이 고정 된 도커가 없기 때문에) 좋은 대답을 알기가 어렵습니다. – grail
다음을보십시오. http://www.shellcheck.net/ – Cyrus
@grail - 데이터는 내 질문의 Example 블록에서 볼 수 있습니다. declare 문에 관해서는 제 생각에 2 배열을 다루고 있습니다 : 1.배열의 배열 2. 각 줄의 "columns"의 배열 – aniculescu