2010-04-09 4 views
5

좋아요, 그래서이 문제가 있습니다. Windows에서 Cygwin에서 실행할 스크립트를 작성합니다. 나는 그것이 스크립트 문제 일 경우를 대비해 많은 예제 스크립트를 시도했다.배시 쉘; 판독 명령; Windows 7에서 Cygwin을 사용하여

#!/bin/bash 
echo -e "Enter your name and press [ENTER]: \c" 
read var_name 
echo "Your name is: $var_name" 

그럼 난 그것을 실행하고 나는 var_name 반 이름을 입력 :

그래서 나는이 시도했다.

내가 얻을이 :

$ ./project1.sh 
Enter your name and press [ENTER]: Jake 
': not a valid identifierad: `var_name 
Your name is: 

지금까지 내가 읽기에 문제가 있어요 그것을 이해. 내 수업을 위해 프로젝트를 진행하려고하는데 왜 읽을 수 없는지 알 수는 없습니다. 나는 그 책을 뒤따라 승리를 거두지 못했고, 웹에서 이러한 예들에 의지하여 나에게도 효과가없는 것처럼 보였다. 아무도 내 설치 또는 뭔가를 놓치고있다면 어떤 생각을 가지고, 감사합니다.

+0

여러분의 예는 Cygwin과 Linux 환경 모두에서 작성된 것으로 작동합니다. 이 간단한 예제를 시도해보고 그것이 당신을 위해 작동하는지 확인하십시오 :'read NAME; echo $ NAME' – meagar

+0

고마워. 그것은 편집자 문제였습니다. vi 편집기 대신 Windows 편집 및 저장을 사용하여 지금 작업하고 있습니다. 비록 그것을 밖으로 테스트 주셔서 감사합니다. – CrazyGrunt

답변

9

당신은 해당 스크립트 상에 od -xcb을해야 할 필요가 없습니다. 내 추측은 거의 틀림없이 잘못된 줄 끝 문자를 가질 것입니다.

나는이 제안 이유는 선 이유는

': not a valid identifierad: `var_name 

이 의심 두 줄과 같습니다

.........................ad: `var_name 
': not a valid identifier 

가 함께 병합합니다 (. 문자를 덮어 뭔가를 나타내는 경우).

그 라인에서 변수 V R _ N m E 캐리지 리턴 오히려 더 정상보다 있었다면 경우 것

var_name.

그것은 또한 Cygwin에서의 당신은 Cygwin에서 그냥 LF를 기대 어디 CR/LF를 사용하는 윈도우 편집기로 스크립트를 편집 할 때 문제가 종종있다 있기 때문에 결론을 가리키는 사실.

실제 스크립트에서 od -xcb을 실행하면 하나 이상의 스크립트 행에 해당 Windows 줄 끝이 있음을 알 수 있습니다.


사실은, 난 그냥 단지 read 라인의 끝에 CTRL-M을 넣어 우분투에 따라 본을 시험하고 출력 (약간 CTRL-M 보여주기 위해 수정)되었습니다 다른에서

[email protected]:~$ od -xcb qq.sh ; ./qq.sh 

0000000 2123 622f 6e69 622f 7361 0a68 6365 6f68 
      # ! / b i n / b a s h \n e c h o 
     043 041 057 142 151 156 057 142 141 163 150 012 145 143 150 157 
0000020 2d20 2065 4522 746e 7265 7920 756f 2072 
       - e  " E n t e r  y o u r  
     040 055 145 040 042 105 156 164 145 162 040 171 157 165 162 040 
0000040 616e 656d 6120 646e 7020 6572 7373 5b20 
      n a m e  a n d  p r e s s  [ 
     156 141 155 145 040 141 156 144 040 160 162 145 163 163 040 133 
0000060 4e45 4554 5d52 203a 635c 2022 720a 6165 
      E N T E R ] :  \ c "  \n r e a 
     105 116 124 105 122 135 072 040 134 143 042 040 012 162 145 141 
0000100 2064 6176 5f72 616e 656d 0a0d 6365 6f68 
      d  v a r _ n a m e \r \n e c h o 
               ^^ 

     144 040 166 141 162 137 156 141 155 145 015 012 145 143 150 157 
0000120 2220 6f59 7275 6e20 6d61 2065 7369 203a 
       " Y o u r  n a m e  i s :  
     040 042 131 157 165 162 040 156 141 155 145 040 151 163 072 040 
0000140 7624 7261 6e5f 6d61 2265 0a0a 
      $ v a r _ n a m e " \n \n 
     044 166 141 162 137 156 141 155 145 042 012 012 
0000154 

Enter your name and press [ENTER]: Pax 
': not a valid identifierar_name 
Your name is: 

을 단어, 매우과 비슷합니다.

: 두 번째 라인이주는 첫 번째 덮어

abcdefghij.sh: line 99 read: `var_name 
`: not a valid identifier 

: 옆으로 (지금은 내 Cygwin에서 환경에 대한 액세스 권한이 있는지)으로


은, 당신이보고있는 것은 출력 즉

`: not a valid identifierad: `var_name 
는 이상한 단어 identifierad 실제로 identifierread:에서 최종 ad: 구성되어 있습니다. 그 이유는 위의 예제와 비슷합니다 (정확함과 반대). 파일 이름과 줄 번호가 내 작은 테스트 스크립트와 다를 수 있기 때문입니다.

+4

그리고 [dos2unix] (http://www.linuxmanpages.com/man1/dos2unix.1.php)를 사용하여 고칠 수 있습니다. –

+0

또는 $ {DEITY : -GreatGreenArkleseizure}가 의도 한대로 다음과 같이 vi를 사용하십시오. – paxdiablo

+0

좋아, vi 편집기를 사용하여 다시 작성했습니다. 그 좌절감 장애물을 극복하게되어 기쁘다. 정말 고마워. – CrazyGrunt

1

사용자에게 메시지를 표시하려면 read을 사용해도됩니다. 아니오 echo

read -r -p "Enter your name and press: " var_name 
+0

좋아, 나는이 시점에서 내가 가진 설정에 문제가 있다고 생각했다. 출력과 함께 그 라인을 사용할 때 이전과 같은 오류가 발생합니다. 빠른 응답에 감사드립니다. – CrazyGrunt

관련 문제