2010-04-09 40 views
5

Được rồi vì vậy tôi đang gặp sự cố này. Tôi viết một kịch bản để chạy trong Cygwin trên Windows. Tôi đã thử một loạt các kịch bản ví dụ cơ bản trong trường hợp đó là vấn đề kịch bản của tôi.Bash Shell; đọc lệnh; sử dụng Cygwin trên Windows 7

Vì vậy, tôi cố gắng này:

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

Sau đó, tôi sẽ chạy nó và tôi nhập tên cho var_name.

tôi có được điều này:

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

Vì vậy, như xa như tôi hiểu nó Tôi gặp một vấn đề với đọc. Tôi đang cố gắng để làm việc trên một dự án cho lớp học của tôi, nhưng tôi không thể có vẻ để tìm ra lý do tại sao nó sẽ không đọc nó. Tôi theo sau cuốn sách mà không có chiến thắng sau đó sử dụng những ví dụ trên web mà dường như không làm việc cho tôi. Có ai có bất kỳ ý tưởng nếu nó là thiết lập của tôi hoặc nếu tôi thiếu một cái gì đó, cảm ơn.

+0

Đối với những gì đáng giá, ví dụ của bạn hoạt động như được viết trong cả môi trường Cygwin và Linux của tôi. Hãy thử ví dụ đơn giản này và xem nó có phù hợp với bạn không: 'đọc NAME; echo $ NAME' – meagar

+0

Cảm ơn. Đó là một vấn đề biên tập. Tôi đã sử dụng cửa sổ chỉnh sửa và tiết kiệm thay vì sau đó trình soạn thảo vi, vì vậy tôi có nó làm việc ngay bây giờ. Cảm ơn bạn đã thử nghiệm nó ra mặc dù. – CrazyGrunt

Trả lời

9

Bạn nên làm od -xcb trên tập lệnh đó. Guesstimate của tôi là nó gần như chắc chắn sẽ có dòng kết thúc sai ký tự trong đó.

Lý do tôi đề nghị này là bởi vì dòng:

': not a valid identifierad: `var_name 

vẻ nghi ngờ như hai dòng:

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

sáp nhập với nhau (nơi . ký tự chỉ ra cái gì đó được ghi đè).

Đó sẽ là trường hợp nếu biến của bạn phù hợp đó là vmột r_nmộtmevận chuyển-trở chứ không phải là bình thường hơn var_name.

Thực tế là Cygwin cũng trỏ đến kết luận đó vì thường có sự cố khi bạn chỉnh sửa tập lệnh bằng trình chỉnh sửa Windows sử dụng CR/LF nơi Cygwin mong đợi chỉ LF.

Tôi nghi ngờ bạn sẽ thấy rằng đang thực hiện od -xcb trên tập lệnh thực tế của bạn cho thấy rằng bạn có các dòng kết thúc Windows trên một hoặc nhiều dòng tập lệnh của mình.


Trong thực tế, tôi chỉ thử nghiệm này dưới Ubuntu bằng cách đặt một CTRL-M vào cuối chỉ dòng read và đầu ra được (một chút thay đổi để hiển thị các 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: 

Trong khác các từ, rất tương tự với những gì bạn đang thấy.


Là một sang một bên (bây giờ mà tôi được tiếp cận với môi trường Cygwin của tôi), những gì bạn đang thấy là kết quả:

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

nơi dòng thứ hai ghi đè đầu tiên, cho:

`: not a valid identifierad: `var_name 

Nói cách khác, từ lạ identifierad là thực sự tạo thành từ identifier và trận chung kết ad: từ read:. Lý do nó chỉ tương tự như ví dụ trên của tôi (trái với chính xác) là vì tên tệp và số dòng của bạn sẽ khác với tập lệnh thử nghiệm nhỏ của tôi.

+4

Và bạn có thể sửa lỗi bằng [dos2unix] (http://www.linuxmanpages.com/man1/dos2unix.1.php). –

+0

Hoặc chỉ sử dụng vi, như $ {DEITY: -GreatGreenArkleseizure} dự định :-) – paxdiablo

+0

Được rồi tôi viết lại nó bằng cách sử dụng trình soạn thảo vi, làm việc như một sự quyến rũ. Rất vui khi vượt qua rào cản thất vọng đó, lol. Cám ơn rất nhiều. – CrazyGrunt

1

bạn chỉ có thể sử dụng read để nhắc người dùng. Không cần số echo

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

Được rồi, tôi đã thử rằng, tại thời điểm này, tôi đoán nó là một vấn đề với các thiết lập tôi có. Tôi nhận được cùng một lỗi như trước khi tôi sử dụng dòng đó cùng với đầu ra như trước. Cảm ơn bạn đã phản hồi nhanh chóng. – CrazyGrunt

Các vấn đề liên quan