모두.
다음 샘플 코드가 있습니다.
#!/bin/bash
echo "[\033[01;32m green \033[01;37m]"
echo "[\033[01;31m red \033[01;37m]"
이 스크립트를 로컬에서 실행하면 올바른 출력 색상이 나타납니다.
하지만 scp를 통해 다른 호스트에 복사하고 "ssh"를 사용하여 실행하면[이메일 보호됨]"sudo sh color-test.sh"" 이 스크립트는 색상 대신 코드를 인쇄합니다.
원격으로 스크립트를 실행할 때 주의해야 할 사항이 있나요?
답변1
행동
echo '\033'
구현 및/또는 환경에 따라 다릅니다.
UNIX 호환 구현의 경우 ESC 문자 뒤에 NL이 출력되고 일부 다른 구현에서는 ESC 문자 \033
뒤에 NL이 출력됩니다. -e
이러한 이스케이프 시퀀스를 확장하기 위한 일부 지원 옵션이 있습니다.\033
스크립트에 #! /bin/bash
she-bang이 있지만 스크립트를 로 실행하고 있으므로 sh the-script
대신 sh
으로 해석됩니다 bash
.
대부분의 시스템에서 bash
내장 함수는 echo
기본적으로 시퀀스를 확장하지 않습니다. 이 작업은 이 옵션이 활성화되거나 사용되는 경우 에만 \x
수행됩니다( 및 옵션이 모두 활성화되지 않은 경우).xpg_echo
-e
xpg_echo
posix
sh
이와 관련하여 로컬 구현은 UNIX 규격일 수 있지만(예: dash
또는 bash
기본적으로 활성화된 옵션으로 컴파일 xpg_echo
), 원격 서버에서의 구현은 그렇지 않습니다(예: bash
).
이식 가능하고 안정적인 동작을 원한다면,printf
대신 사용:
printf '[\33[01;32m green \33[01;37m]\n'
printf '[\33[01;31m red \33[01;37m]\n'