2014-09-14 5 views
0

에서 파일에 내가 명령의이 종류가있는 메이크가 : 그래서에코 명령 출력 "-n"메이크

browserify: 
    rm -rf ./dist 
    mkdir dist 
    # Browserify 
    echo -n "/* ${NPM_PACKAGE} ${NPM_VERSION} ${GITHUB_PROJ} */" \ 
     > dist/pica.js 

을 나는 파일의 상단에 출력 코멘트를하지 않고해야 make browserify을 수행 할 때 \n. 하지만 몇 가지 이유로 ... 결과는 다음과 같습니다.

-n /* package 0.0.0 */ 
...more things... 

저는 osx에서 zsh를 사용하고 있습니다.

+0

-n bash 확장 기능입니다. 대시로 작동합니다. – rhubarbdog

+1

@rhubarbdog : echo는 bash 내장 함수가 아니라 독립 실행 형 프로그램입니다. 그러나 다른 구현이 있습니다. Linux는 일반적으로 Coreutils 패키지의 Linux를 가지고 있으며, 다른 Unices는 다른 패키지를 가지고 있습니다. – lxg

+0

문제를 재현 할 수 있습니다 (GNUMake 3.81). 에코는 명령 줄에서 호출되고 파일로 리디렉션 될 때 올바르게 작동합니다. 그것은 makefile에서 표준 출력에 쓸 때 올바르게 작동합니다; makefile에서 호출되고 파일로 리디렉션 될 때만 실패합니다. – Beta

답변

5

사용중인 쉘이 상관 없습니다. 항상을 사용하십시오. SHELL make 변수를 다른 것으로 설정하지 않는 한, 호출하는 셸로 /bin/sh을 사용하십시오. 사용자가 조리법을 호출하는 데 사용하는 쉘을 사용하면 어떤 재앙이 될지 생각하십시오!

많은 GNU/Linux 시스템에서 은 실제로 bash에 대한 링크입니다. 다른 GNU/리눅스 시스템에서, /bin/sh은 에 대한 링크이며, 모든 확장자가없는 작은 POSIX 표준 쉘입니다. bash (dash)은 이식 가능한 쉘 스크립트를 빠르게 실행하는 데 적합하지만 사용자의 대화식 쉘을 빠뜨리면 좋지 않습니다 너무 많은 예상 기능). GNU 기반 시스템이 아닌 경우 (예 : OSX) /bin/shksh이거나 다른 것일 수 있습니다.

echo을 호출하여이 후행 줄 바꿈을 인쇄하지 않는 이식 가능한 표준 방법은 없습니다. echo 프로그램이 있으며 다른 프로그램이 다르게 작동합니다. bashzsh 포함한 많은 쉘, 또한 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 
+0

+1 'printf'. –

+0

그냥 질문이지만 작동하지만'printf' 명령은 널리 사용 가능하고 설치되어 있습니다. 나는 적어도 7 년 동안 그것에 대해 정말로 들어 본 적이 없거나 사용되는 것을 본 적이 없기 때문에 묻습니다. 텍스트를 파일로 출력하는 더 좋은 방법이 있다면 훨씬 더 좋을 것입니다. –

+1

귀하의 의견을 이해할 수 없습니다; 어쩌면 당신은 "printf 명령이 널리 사용 가능하지 않고 설치되지 않았다"고 말할 의도가 있습니까? 그렇다면 나는 그것이 사실이 아니라고 확신합니다.'printf'는 1992 년에 발표 된 이슈 4의 POSIX 표준에 추가되었습니다. 여러분이이 말을 들었는지에 관계없이, UNIX 시스템을 실행 한 이후로 수년이 지났습니다. 그것. 텍스트를 출력 할 때,'echo'는 텍스트를 출력하는 데는 좋지만 ... 당신이 요구 한 것 인 후행없는 _ 텍스트를 출력하는 더 좋고/더 간단한 대안은 없습니다. – MadScientist