Bash에서 긴 명령을 조립할 때 사용하는 Tips
매번 쓰는 것도 번거롭고, 코피페도 똑같이 번거롭다. 터미널에서 나가고 싶지 않습니다.
뭔가 굉장히 만들지 않아도, 스스로 조금 랩 하고 싶을 때에 깔끔하게 만들 수 있고, 또한 개발중 뭔가 편리한 것처럼 간단하고 인터랙티브하게 할 수 있는 Tips입니다.
우선 Bash의 select
우선 Bash의 select입니다.
예를 들어, 다음과 같은 폴더 구조를 가진 리포지토리에서 대화식으로 디렉터리를 인수로 지정하려고 합니다.
services/
├── servcie_A
├── servcie_B
├── servcie_C
├── servcie_D
├── servcie_E
├── servcie_F
└── servcie_G
아래와 같이 select를 활용하면 사용하기 쉽습니다.
SERVICE_DIR=./services
services=$(ls -1 ${DEPLOY_DIR})
echo ""
echo "select deployment:"
select var in $service
do
if [ "${REPLY}" = "q" ]; then
echo "QUIT."
exit -1
fi
if [ -n "${var}" ]; then
break
else
echo "invalid selection."
fi
done
echo $service
숫자로 선택할 수 있는 것이 마음에 듭니다. 입력 실수가 적고 숫자 + Enter로 선택할 수있는이 방법을 좋아합니다. 개인적으로는 옵션이 10개 정도 지금은 이것이 사용하기 쉽습니다.
select deployment:
1) servcie_A 3) servcie_C 5) servcie_E 7) servcie_G
2) servcie_B 4) servcie_D 6) servcie_F
#? 6
servcie_F
선택지 10개 정도라고 썼습니다만, 거기까지 조우하는 일은 없지만, 선택사항이 많아져 버리는 경우가 있습니다.
그렇다면이 방법은 어렵습니다.
select deployment:
1) servcie_A1 17) servcie_F2 33) servcie_K3 49) servcie_Q1 65) servcie_V2
2) servcie_A2 18) servcie_F3 34) servcie_L1 50) servcie_Q2 66) servcie_V3
3) servcie_A3 19) servcie_G1 35) servcie_L2 51) servcie_Q3 67) servcie_W1
4) servcie_B1 20) servcie_G2 36) servcie_L3 52) servcie_R1 68) servcie_W2
5) servcie_B2 21) servcie_G3 37) servcie_M1 53) servcie_R2 69) servcie_W3
6) servcie_B3 22) servcie_H1 38) servcie_M2 54) servcie_R3 70) servcie_X1
7) servcie_C1 23) servcie_H2 39) servcie_M3 55) servcie_S1 71) servcie_X2
8) servcie_C2 24) servcie_H3 40) servcie_N1 56) servcie_S2 72) servcie_X3
9) servcie_C3 25) servcie_I1 41) servcie_N2 57) servcie_S3 73) servcie_Y1
10) servcie_D1 26) servcie_I2 42) servcie_N3 58) servcie_T1 74) servcie_Y2
11) servcie_D2 27) servcie_I3 43) servcie_O1 59) servcie_T2 75) servcie_Y3
12) servcie_D3 28) servcie_J1 44) servcie_O2 60) servcie_T3 76) servcie_Z1
13) servcie_E1 29) servcie_J2 45) servcie_O3 61) servcie_U1 77) servcie_Z2
14) servcie_E2 30) servcie_J3 46) servcie_P1 62) servcie_U2 78) servcie_Z3
15) servcie_E3 31) servcie_K1 47) servcie_P2 63) servcie_U3
16) servcie_F1 32) servcie_K2 48) servcie_P3 64) servcie_V1
#?
peco의 도움으로
이럴 때, 제 경우에는 오랫동안 신세를 졌습니다 peco
코드는 상당히 간결합니다.
Bash 이외를 사용하게 됩니다만, 1 바이너리 두어 두는 것만으로 움직이는 것이라고 생각하고 있습니다.
PECO_EXE=./peco
SERVICE_DIR=./services
svc=$(ls -1 ${SERVICE_DIR} | ${PECO_EXE})
echo ${svc}
peco를 사용하면 이전과 같은 대량의 선택도,
쿼리에서 쉽게 선택할 수 있습니다.
마지막으로 확인을 넣어
Terraform이나 Ansible의 실행처를 잘못하면, 예를 들면 개발 환경에서 프로덕션에 영향 없어도, 시간도 돈도 걸리므로 마지막에 확인 프롬프트는 넣도록 하고 있습니다.
여기는 select 사용하고 있습니다.
echo ""
echo "Your selection:"
echo "Service-> ${service}"
echo "Variable-> ${var}"
echo "Operation-> ${op}"
select isOk in ok exit
do
if [ -n "${isOk}" ]; then
if [ "ok" == "${isOk}" ]; then
break
elif [ "exit" == "${isOk}" ]; then
echo "EXIT!"
exit -1
fi
else
echo "invalid selection."
fi
done
이런 느낌입니다. 개발중등은 익숙해지면 잘못 실행해 버리는 일도 있습니다만, 없는 것보다는 몹시라고 생각하고 있습니다.
Your selection:
Service-> servcie_C2
Variable-> myenv.tfvars
Operation-> apply
1) ok
2) exit
#?
낡은 방법이라고 생각합니다만, 방금의 Tips를 소개할 기회가 있었으므로 써 두었습니다.
Reference
이 문제에 관하여(Bash에서 긴 명령을 조립할 때 사용하는 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yomon8/items/b8205f628bdbd4f133b6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
services/
├── servcie_A
├── servcie_B
├── servcie_C
├── servcie_D
├── servcie_E
├── servcie_F
└── servcie_G
SERVICE_DIR=./services
services=$(ls -1 ${DEPLOY_DIR})
echo ""
echo "select deployment:"
select var in $service
do
if [ "${REPLY}" = "q" ]; then
echo "QUIT."
exit -1
fi
if [ -n "${var}" ]; then
break
else
echo "invalid selection."
fi
done
echo $service
select deployment:
1) servcie_A 3) servcie_C 5) servcie_E 7) servcie_G
2) servcie_B 4) servcie_D 6) servcie_F
#? 6
servcie_F
select deployment:
1) servcie_A1 17) servcie_F2 33) servcie_K3 49) servcie_Q1 65) servcie_V2
2) servcie_A2 18) servcie_F3 34) servcie_L1 50) servcie_Q2 66) servcie_V3
3) servcie_A3 19) servcie_G1 35) servcie_L2 51) servcie_Q3 67) servcie_W1
4) servcie_B1 20) servcie_G2 36) servcie_L3 52) servcie_R1 68) servcie_W2
5) servcie_B2 21) servcie_G3 37) servcie_M1 53) servcie_R2 69) servcie_W3
6) servcie_B3 22) servcie_H1 38) servcie_M2 54) servcie_R3 70) servcie_X1
7) servcie_C1 23) servcie_H2 39) servcie_M3 55) servcie_S1 71) servcie_X2
8) servcie_C2 24) servcie_H3 40) servcie_N1 56) servcie_S2 72) servcie_X3
9) servcie_C3 25) servcie_I1 41) servcie_N2 57) servcie_S3 73) servcie_Y1
10) servcie_D1 26) servcie_I2 42) servcie_N3 58) servcie_T1 74) servcie_Y2
11) servcie_D2 27) servcie_I3 43) servcie_O1 59) servcie_T2 75) servcie_Y3
12) servcie_D3 28) servcie_J1 44) servcie_O2 60) servcie_T3 76) servcie_Z1
13) servcie_E1 29) servcie_J2 45) servcie_O3 61) servcie_U1 77) servcie_Z2
14) servcie_E2 30) servcie_J3 46) servcie_P1 62) servcie_U2 78) servcie_Z3
15) servcie_E3 31) servcie_K1 47) servcie_P2 63) servcie_U3
16) servcie_F1 32) servcie_K2 48) servcie_P3 64) servcie_V1
#?
이럴 때, 제 경우에는 오랫동안 신세를 졌습니다 peco
코드는 상당히 간결합니다.
Bash 이외를 사용하게 됩니다만, 1 바이너리 두어 두는 것만으로 움직이는 것이라고 생각하고 있습니다.
PECO_EXE=./peco
SERVICE_DIR=./services
svc=$(ls -1 ${SERVICE_DIR} | ${PECO_EXE})
echo ${svc}
peco를 사용하면 이전과 같은 대량의 선택도,
쿼리에서 쉽게 선택할 수 있습니다.
마지막으로 확인을 넣어
Terraform이나 Ansible의 실행처를 잘못하면, 예를 들면 개발 환경에서 프로덕션에 영향 없어도, 시간도 돈도 걸리므로 마지막에 확인 프롬프트는 넣도록 하고 있습니다.
여기는 select 사용하고 있습니다.
echo ""
echo "Your selection:"
echo "Service-> ${service}"
echo "Variable-> ${var}"
echo "Operation-> ${op}"
select isOk in ok exit
do
if [ -n "${isOk}" ]; then
if [ "ok" == "${isOk}" ]; then
break
elif [ "exit" == "${isOk}" ]; then
echo "EXIT!"
exit -1
fi
else
echo "invalid selection."
fi
done
이런 느낌입니다. 개발중등은 익숙해지면 잘못 실행해 버리는 일도 있습니다만, 없는 것보다는 몹시라고 생각하고 있습니다.
Your selection:
Service-> servcie_C2
Variable-> myenv.tfvars
Operation-> apply
1) ok
2) exit
#?
낡은 방법이라고 생각합니다만, 방금의 Tips를 소개할 기회가 있었으므로 써 두었습니다.
Reference
이 문제에 관하여(Bash에서 긴 명령을 조립할 때 사용하는 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yomon8/items/b8205f628bdbd4f133b6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
echo ""
echo "Your selection:"
echo "Service-> ${service}"
echo "Variable-> ${var}"
echo "Operation-> ${op}"
select isOk in ok exit
do
if [ -n "${isOk}" ]; then
if [ "ok" == "${isOk}" ]; then
break
elif [ "exit" == "${isOk}" ]; then
echo "EXIT!"
exit -1
fi
else
echo "invalid selection."
fi
done
Your selection:
Service-> servcie_C2
Variable-> myenv.tfvars
Operation-> apply
1) ok
2) exit
#?
Reference
이 문제에 관하여(Bash에서 긴 명령을 조립할 때 사용하는 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yomon8/items/b8205f628bdbd4f133b6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)