Bash Shell; считайте команду; использование Cygwin в Windows 7

Хорошо, таким образом, у меня есть эта проблема. Я описываю сценарий, который будет выполнен в cygwin в Windows. Я попробовал набор основных сценариев в качестве примера в случае, если это была моя проблема сценариев.

Таким образом, я попробовал это:

#!/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:

Таким образом, поскольку далеко насколько я понимаю у меня есть проблема с чтением. Я пытаюсь работать над проектом для своего класса, но я, может казаться, не выясняю, почему он не считает его. Я следовал, книга без триумфа затем обратилась к этим примерам в сети, которые, кажется, не работают на меня также. Делает у любого есть любая идея, если это - моя установка или если я пропускаю что-то, спасибо.

5
задан CrazyGrunt 9 April 2010 в 00:10
поделиться

2 ответа

Вы должны выполнить od -xcb для этого скрипта. Я предполагаю, что в нем почти наверняка будет неправильный символ окончания строки.

Причина, по которой я предлагаю это, заключается в том, что строка:

': not a valid identifierad: `var_name

подозрительно похожа на две строки:

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

, объединенные вместе (где символы . указывают на то, что было перезаписано).

Так было бы, если бы ваша переменная в этой строке была v a r _ n a m e возврат каретки вместо более обычного var_name .

Тот факт, что это Cygwin, также указывает на этот вывод, поскольку часто возникают проблемы при редактировании сценариев с помощью редактора Windows , который использует CR / LF, тогда как Cygwin ожидает только LF.

Я подозреваю, что вы обнаружите, что выполнение od -xcb в вашем реальном скрипте показывает, что у вас есть эти окончания строки Windows в одной или нескольких строках вашего скрипта.


Фактически, я только что протестировал это под Ubuntu, поместив CTRL-M только в конец строки read , и вывод был (слегка изменен, чтобы показать ] CTRL-M ):

pax@pax-desktop:~$ 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: 

Другими словами, очень похоже на то, что вы видите.


В стороне (теперь, когда у меня есть доступ к моей среде Cygwin), вы видите результат:

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

где вторая строка перезаписывает первую, давая:

`: not a valid identifierad: `var_name

Другими словами, странное слово идентификатор на самом деле состоит из идентификатора и последнего объявления: из , читаемого: .Причина, по которой он похож только на мой пример выше (в отличие от точного), заключается в том, что ваше имя файла и номер строки будут отличаться от моего небольшого тестового скрипта.

9
ответ дан 13 December 2019 в 22:04
поделиться

вы можете просто использовать read для подсказки пользователю. Нет необходимости в echo

read -r -p "Enter your name and press: " var_name
1
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: