스크립트에서 색상 옵션이있는 에코 명령 및 명령이 다르게 작동 함


15

echo -e "\e[1;31mThis is red text\e[0m"쉼표 줄로 실행 하면 빨간색 텍스트가 인쇄됩니다.

그러나 스크립트 파일에 쓰면 test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

운영 $ sh test.sh

인쇄 -e \e[1;31mThis is red text\e[0m

왜 다르게 행동합니까?

답변:


29

echoBash와 dash ( /bin/sh)에 내장 된 쉘 입니다. echo명령 행에서 실행 하는 경우 Bash 기본 제공을 사용하고 있고 쉘 스크립트를 실행중인 경우 shDash 기본 제공을 사용하고 있습니다.

의 대시 버전은 echo알고하지 않습니다 -e에 대한 특별한 처리없이 선택이 아닌 바로 출력 아무것도 그대로 \시퀀스를.

Bash를 사용하여 쉘 스크립트를 실행하거나 다음 /bin/echo대신 사용하십시오 echo.

/bin/echo -e "\e[1;31mThis is red text\e[0m"

다른 버전의 문제를 피하기 위해 대신 echo사용할 수 있습니다 printf. 반대로 echo printf항상 \시퀀스를 해석 하지만 끝에 줄 바꿈을 자동으로 추가하지 않으므로 \n원하는 경우 끝에 줄을 추가해야합니다 .

일부 버전은 printf이해하지 못 \e하므로 \033대신 사용해야 합니다.

printf "\033[1;31mThis is red text\033[0m\n"

효과가있다. /bin/echodash ( /bin/sh)와 bash로; echobash 또는 ./tes.sh둘 다 올바르게 작동합니다. 아래 코드는 작동 bash합니다. [$ UID -ne 0]이면; 그런 다음 "루트 사용자 아님"echo echo "Root User"fi
qingfeng

1

로 실행하지 마십시오. sh test.sh말한 것처럼 텍스트를 흰색으로 인쇄합니다. 스크립트를 만든 후 실행하여 실행 가능하게합니다.

sudo chmod +x /path/test.sh

여기에 이미지 설명을 입력하십시오

sudo, sudo ./test.sh또는 ./test.sh둘 다 작동 하여 스크립트를 실행하십시오 .

또는

으로 스크립트를 실행 bash,

bash /path/test.sh

을 실행 chmod a+x test.sh하면 텍스트를 읽기 색상으로 인쇄합니다. 차이점은 무엇입니까? 리눅스에서 일어난 일과 ./test.sh같아야 sh test.sh합니까?
qingfeng

스크립트를 실행할 때 sh를 사용할 필요가 없습니다. bash 인터프리터 #! /bin/bash를 사용 하여 스크립트를 만들었습니다.bash test.sh
Avinash Raj

또한 .현재 디렉토리를 의미합니다.
Avinash Raj

스크린 샷을 참조하십시오. 내 test.sh 파일은 바탕 화면 안에 ./test.sh있습니다. 그래서 해당 바탕 화면 폴더로 이동 한 다음 실행합니다 . 마지막으로 작동합니다 .. 현재 디렉토리 안에있는 경우에만 스크립트를 실행하십시오 .
Avinash Raj

1

올바른 형식의 명령이 모두 필요합니다.

적절한 반향 문 : echo "Hello World!"

색상이있는 적절한 반향 문 : echo "\e[1;31mHello World!\e[0m"

bash 스크립트에 색상을 추가하는 것은 매우 간단하지만 쉽게 혼동되는 것들 중 하나입니다. =)

이 사이트 는 귀하에게 모두 명확하게 설명 할 수 있습니다. 누가 정확한 색상 코드를 모두 기억할 수 있습니까? 롤

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.