나는 bash가 사용자에게 읽기를 입력하고 파일 또는 파일 목록을 확인하도록 요청한 다음 해당 확인 결과로 응답하도록하려고합니다. 내가 지금까지 얻은 것은 다음과 같습니다 ...
read -p "what are we looking for?" RESP
if [ "$RESP" = sed -n ${some line from inside file} ./file |
then do "returned variable from file"
else
echo "You need more bash programming"
나는 여기에 아주 새로운 사람이라는 것을 알고 있지만 응답이 무엇이든 파일(파일 내부에 있는 내용)에 대해 한 줄씩 확인해야 하는지 알 수 없습니다. 그런 다음 해당 줄에 대한 관련 변수를 반환합니다.
좋아한다고 말해
"RESP"=line 3(or any line that matches) of ./this_file
return "var1" of that line
Do "var1"
fi
이렇게 하는 방법이 있나요? 이 코드가 간단한 bash에서 어떻게 보일지 혼란스럽습니다. 도와주세요.
예:
line1:"Google을 열어주세요" "var1[http:www.google.com 열기]
bash에 "var1" 전달
답변1
파일의 경우 다음 형식을 권장합니다.
please open google|open http:www.google.com
여기의 응답은 수직 막대 앞의 모든 것입니다. 당신의 var1
것은 수직선 이후의 모든 것입니다. (한 줄에 더 많은 변수를 넣으려면 더 많은 수직선으로 구분하세요.)
스크립트의 시작은 다음과 같습니다.
#!/bin/sh
read -p "what are we looking for? " response
action="$(awk -F\| -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"
읽기 명령이 입력됩니다. (가장 좋은 방법은 중요한 내용을 실수로 덮어쓰지 않도록 쉘 변수에 소문자를 사용하는 것입니다.)
with 줄은 awk
로 시작하는 파일의 첫 번째 줄에서 작업을 추출합니다 response|
. 첫 번째 수직 막대 이후의 모든 것이 사용자의 명령이라고 가정합니다.
위의 마지막 줄이 실행됩니다 action
. 로 이를 수행합니다 eval
. 사용하려면 eval
일정 수준의 신뢰가 필요합니다. 디자인을 다듬을 때 의 사용을 제거해야 합니다 eval
.
다른 필드 구분 기호 사용
필드 구분 기호 대신 @
of를 사용하면 다음 줄이 표시됩니다.|
file
please open google@open http:www.google.com
코드에는 한 가지 변경이 필요합니다.
read -p "what are we looking for? " response
action="$(awk -F@ -v r="$response" '$1==r{print $2;exit}' file)"
eval "$action"