다음을 수행하여 tty를 색칠할 수 있습니다.
myscript.sh:
#!/bin/bash
echo -e "This is \033[0;31mRED\033[0m"
일반적으로 다른 "상위" 프로그램이 myscript.sh
하위 프로세스로 실행 중인 경우 색상 코드가 올바르게 다시 전달되고 상위 프로그램을 실행하는 셸은 하위 프로세스의 색상을 표시합니다.
여러 번 작동하지 않습니다. GNU Make는 반례입니다
파일 생성:
foo:
./myscript.sh
내가 실행하면 make foo
출력은 다음과 같습니다
This is \033[0;31mRED\033[0m
어떤 이유로 make
하위 프로세스의 출력을 이스케이프해야 하는 것처럼 느껴집니다.
make
누구든지 그것을 작성한 사람이 안티 기능을 생성하려면 코드(추가 작업)를 추가해야 하기 때문에 이것이 놀라운 일이라고 생각합니다 . 아니면 애플리케이션이 make
tty의 스위치를 켜서 모든 것이 자동으로 이스케이프되도록 합니까? 그렇다면 이 동작을 무시하고 프로그램이 make
하위 프로세스 데이터를 변환하지 않고 tty에 전달하도록 강제할 수 있습니까? 아니면 각 프로그램이 자체 방식으로 이 동작을 제어합니까?
답변1
문제는 스크립트가 POSIX가 아닌 것에 의존한다는 것입니다.bash
기능하지만make
사용 중/bin/sh
셸의 경우(예: Debian) 다음과 같은 다른 프로그램일 수 있습니다.dash
(POSIX 표준을 더 준수하는 쉘)
추가 자료:
답변2
Thomas가 답변에서 언급했듯이 사용된 셸은 make
스크립트를 수동으로 실행할 때 사용하는 셸과 다릅니다.
일반적으로 스크립트에서 특정 쉘에 특정한 기능을 사용하는 경우 해당 특정 쉘을 shebang 줄에 배치해야 합니다.
예를 들어:
#!/bin/bash
echo -e "This is \033[0;31mRED\033[0m"
답변3
호출된 스크립트는 내장 파일 시스템이 아닌 make
파일 시스템을 사용해야 합니다 .echo
/bin/echo -e "\033...