2012-08-17 5 views
2

다양한 echo escape 시퀀스를 테스트하는 bash 스크립트를 CentOS에 작성하려고합니다.Bash 에코 이스케이프 시퀀스

나쁜 해석 : 그런 파일이나 디렉토리

내가 프로그램을 실행할 때,

내가이 오류 메시지가 계속

을 ./test.sh

스크립트는 다음과 같습니다.

#! /bin/bash 

# Test echo escape sequences 

input=$1 

case $input in 
    a) echo -e "\a" testing \a;; 
    b) echo -e "\b" testing \b;; 
    c) echo -e "\c" testing \c;; 
    *) echo Incorrect input 
    exit 1;; 
esac 

어디서 잘못 되었습니까?

편집 : 윈도우 XP 호스트에서 VirtualBox에 CentOS는 최소한의 손님을 실행 해요

편집 2 : 나는 변경하면

#! bin/bash 

#! /bin/bash 

, 내 스크립트 아니었다 그것까지

#! /bin/bash 

나는 부분의 경우 궁금해 "a"는

+1

실행을' –

+0

을 dos2unix'을 통해 영업 이익은 그렇게 할 이유는 무엇입니까? –

+1

@AdrianCornish : 설치가되지 않았거나 (별로 좋지는 않음), bin에 설치되지 않았거나 (다시는 그렇지 않을 가능성이 높기 때문에) 또는 Windows 줄 끝으로 저장 되었기 때문에 'bash'를 찾을 수 없다고 생각합니다. '/ bin/bash^M' (이전에이 문제가있었습니다). –

답변

4

[편집] 원래의 게시물에 의하면,이 보통 DOS LINE에 의해 발생 ENDINGS.

CR/LF DOS 라인 끝의 CR이 인터프리터에서 스크립트를 실행하는 데 사용해야하는 셸의 일부로 표시됩니다.

따라서, 존재하지 않는/bin/bash (CR)을로드하려고하므로 "불량 인터프리터"가 표시됩니다.

이 문제를 해결하는 한 가지 쉬운 방법은 다음 클립 보드에 스크립트의 내용을 복사하는 것입니다

고양이> test.sh (PASTE 클립 보드) (Enter 키를 누릅니다) (PRESS CTRL-D)

이렇게하면 잘못된 줄 끝이 제거됩니다 (다른 방법이 있지만 아주 쉬운/직접적인 해결책입니다)."나쁜 통역"문제가 해결 된 후에는


는, 스크립트의 다른 구문 오류는 아마하고자 할 때 '\에'의 "을 \"의 사용이다.


[편집] 나는 지금 당신이 의미하는 바를 깨닫습니다. 이 대신에보십시오 :

에코 -e '\는'테스트 '\\'는

+1

그냥 실제로 나는 DOS 라인 엔딩 파일을 만들어 MacOS X에서 실행하려고하면 비슷한 (그러나 약간 다른) 에러를 준다는 것을 확인했다. 원래 게시물에 표시된 것보다 – user700390

+1

나는 사실 #을 가졌다! 내 스크립트에서 bin/bash가 아니라 #!/bin/bash – Anthony

+0

귀하의 의견에 따라 답변을 업데이트했습니다. 게시물의 스크립트가 시스템의 스크립트와 다른 이유는 무엇입니까? 다른 불일치가 있습니까? – user700390

2

당신이 추가

chmod 755 test.sh 

같은 것을 사용하여 스크립트를 실행 했습니까 ./test.sh A, 그것은 단지 인쇄 프로그램을 실행 문제는 \ a = 커서를 위로 \ b = 커서를 아래로 \ c = 커서를 앞으로 향하게 할 수 있으므로 사용하고있는 이스케이프 시퀀스입니다. 또한

또는

는 텍스트의 \ A = 제목의 SOH 시작 \ B = STX 시작 또는 텍스트의 \ C = ETX 끝으로 해석

+0

+1 예, chmod + x test.sh를 실행했습니다. – Anthony

+1

스크립트가 저에게 효과적입니다. 어떤 이스케이프 시퀀스가 ​​필요합니까? –

+0

나는 다음과 같이 a, b, c를 시도했다 : ./test.sh a – Anthony

관련 문제