사용중인 쉘이 상관 없습니다. 항상을 사용하십시오. SHELL
make 변수를 다른 것으로 설정하지 않는 한, 호출하는 셸로 /bin/sh
을 사용하십시오. 사용자가 조리법을 호출하는 데 사용하는 쉘을 사용하면 어떤 재앙이 될지 생각하십시오!
많은 GNU/Linux 시스템에서 은 실제로 bash
에 대한 링크입니다. 다른 GNU/리눅스 시스템에서, /bin/sh
은 에 대한 링크이며, 모든 확장자가없는 작은 POSIX 표준 쉘입니다. bash
(dash
)은 이식 가능한 쉘 스크립트를 빠르게 실행하는 데 적합하지만 사용자의 대화식 쉘을 빠뜨리면 좋지 않습니다 너무 많은 예상 기능). GNU 기반 시스템이 아닌 경우 (예 : OSX) /bin/sh
은 ksh
이거나 다른 것일 수 있습니다.
echo
을 호출하여이 후행 줄 바꿈을 인쇄하지 않는 이식 가능한 표준 방법은 없습니다. echo
프로그램이 있으며 다른 프로그램이 다르게 작동합니다. bash
및 zsh
포함한 많은 쉘, 또한 echo
이 내장 된 쉘에 있습니다
$ type -a echo
echo is a shell builtin
echo is /bin/echo
및 echo
의이 버전은 또한 프로그램 echo
다르게 작동합니다. 일부 버전에서는 개행을 억제 할 방법이 없습니다. 일부는 -n
플래그를 사용합니다. 일부는 끝에 \c
을 사용하여 개행 인쇄를 억제합니다. 일부는 이들을 조합하여 지원합니다.
짧은 대답은 휴대용 및 신뢰할 수있는 방법으로 줄 바꿈없이 셸에서 선을 인쇄 할 경우, 당신이 그것을 수행 할 printf
프로그램을 사용한다는 것입니다하지 echo
:
browserify:
rm -rf ./dist
mkdir dist
# Browserify
printf %s "/* ${NPM_PACKAGE} ${NPM_VERSION} ${GITHUB_PROJ} */" \
> dist/pica.js
-n bash 확장 기능입니다. 대시로 작동합니다. – rhubarbdog
@rhubarbdog : echo는 bash 내장 함수가 아니라 독립 실행 형 프로그램입니다. 그러나 다른 구현이 있습니다. Linux는 일반적으로 Coreutils 패키지의 Linux를 가지고 있으며, 다른 Unices는 다른 패키지를 가지고 있습니다. – lxg
문제를 재현 할 수 있습니다 (GNUMake 3.81). 에코는 명령 줄에서 호출되고 파일로 리디렉션 될 때 올바르게 작동합니다. 그것은 makefile에서 표준 출력에 쓸 때 올바르게 작동합니다; makefile에서 호출되고 파일로 리디렉션 될 때만 실패합니다. – Beta