재미로 bash를 사용하여 CLI를 만들고 싶습니다. 나는 다음과 같은 읽기 프롬프트를 원한다
CLI/[path]/:>
단순한
read -p "CLI$PWD/:>"
그러나 이와 같은 명령을 수행하려면 cd
디렉토리를 변경하기 위한 전체 인터페이스를 만들어야 합니다. 다른 기본 명령을 모두 실행하는 방법을 알고 있지만 주요 목표는 하나의 명령으로 디렉터리를 변경할 수 있는 것입니다.
예를 들어:
CLI/[path]/:>cd [another path]
CLI/[another path]/:>
지금까지 내 스크립트는 다음과 같습니다.
#!/bin/bash
echo "Welcome to Easy Command-Line Interface! Type 'help' for help and
commands."
while true; do
read -p "ECLI$PWD/:>"
if [ $REPLY = "help" ]; then
echo "ECLI HELP:"
echo "help: Help Menu"
echo "cd: <dir> : Changes Directory"
echo "say: <text> : Prints <text>"
echo "exit: Exits ECLI"
echo "clear: Clears screen"
echo "
"
fi
if [ $REPLY = "exit" ]; then
echo "Exiting ECLI.."
sleep 1.5
clear
break
fi
if [ $REPLY = "clear" ]; then
clear
fi
done
답변1
먼저 따옴표를 사용하기 시작해야 합니다. 눈치채셨나봐요
만약 [ $REPLY = "주문하다"]
[: too many arguments
두 개 이상의 단어가 포함된 명령줄을 입력하면 입력이 실패합니다(오류 메시지와 함께). 다음으로 변경해야 합니다.
만약에 ["$답글"="주문하다"]
방법 1: 줄을 읽고 첫 번째 단어 추출
현재 스크립트가 전체 입력 줄 을 $REPLY
. cd /usr/local
를 사용하여 이 작업을 수행할 수 있습니다. 다음은 매개변수 확장의 예입니다.cd /usr/local
cd
word1="${REPLY%% *}"
큰 타격(1)또는POSIX 사양. 따라서 다음과 같이 스크립트를 수정할 수 있습니다.
︙ if ["$REPLY" = "지우기"]; 분명한 필리핀 제도 word1="${답장%% *}" if["$word1"=cd] 그 다음에 $답글 필리핀 제도 ︙
방법 2: 첫 번째 단어만 읽기
전체 줄을 읽고 싶은 경우는 거의 없습니다. 이 예에서처럼 쉘이 줄을 단어로 나누기를 원하는 경우가 더 많습니다. read
읽을 변수 목록을 명령에 제공하여 이를 수행 할 수 있습니다 .
︙ -p "ECLI$PWD/:>" 읽기명령 매개변수 ︙ 만약에 ["$cmd"= "지우기"]; 분명한 필리핀 제도 if["$cmd"=cd] 그 다음에 CD "$args" 필리핀 제도 ︙
방법 3: 각 단어를 개별적으로 읽기
위의 방법은 개념 증명 장난감에 적합합니다. 실제 애플리케이션에서는 쉘이 입력 행을 원하는 수의 단어로 나누기를 원할 수 있습니다. 다음 옵션을 사용하여 배열을 읽어서 이를 수행할 수 있습니다 -a
.
︙ -p "ECLI$PWD/:>" 읽기-아르 ︙ 만약에 ["${arr[0]}"= "지우기"]; 분명한 필리핀 제도 if [ "${arr[0]}" = cd ] 그 다음에 cd "${arr[1]}" 필리핀 제도 ︙