Невозможно найти простой скрипт bash - PullRequest
0 голосов
/ 17 апреля 2019

Я понимаю, что подобные вопросы были заданы в SO несколько раз. Однако я не смог найти здесь никаких обычных подозреваемых.

#!/bin/bash
myvar="test"
if [ "$myvar" == "test" ]
then
echo "Test mode"
fi

Потратил довольно много времени на это. Кто-нибудь может посоветовать, чего мне не хватает?

Я могу выполнить скрипт, но не смог получить тот же источник.

ошибка при источнике bash: test.sh: line 7: syntax error: unexpected end of file

$ which bash
/bin/bash
$ bash --version
3.2.57(1)

Я могу заставить работать то же самое на моем другом Mac. Так что на моем Mac это что-то не так, но я не могу понять, что это такое. Кроме того, не только вышеупомянутый скрипт, ни один скрипт с условием «если» я не смог найти. Пробовал разные примеры, упомянутые здесь , та же синтаксическая ошибка.

edit1:

$ file test.sh 
test.sh: Bourne-Again shell script text executable, ASCII text

edit2:

$ hexdump -C test.sh
    00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 6d 79 76 61  |#!/bin/bash.myva|
    00000010  72 3d 22 74 65 73 74 22  0a 69 66 20 5b 20 22 24  |r="test".if [ "$|
    00000020  6d 79 76 61 72 22 20 3d  3d 20 22 74 65 73 74 22  |myvar" == "test"|
    00000030  20 5d 0a 74 68 65 6e 0a  65 63 68 6f 20 22 54 65  | ].then.echo "Te|
    00000040  73 74 20 6d 6f 64 65 22  0a 66 69 0a              |st mode".fi.|
    0000004c

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

Проверьте наличие различий символов новой строки или страниц кодирования.если это что-то такое простое, как этот, и в нем участвует Mac, всегда проверяйте сначала

0 голосов
/ 19 апреля 2019

Хорошо, наконец-то, нашел проблему.

Я удалил свой файл .bashrc, и он работает нормально.Похоже, что-то в .bashrc это испортило.

$ source test.sh
Test mode

Спасибо, все это ценят.

0 голосов
/ 18 апреля 2019

Как уже заявили другие пользователи, вы можете проверить, является ли символ новой строки LF, потому что CRLF потерпит неудачу в linux. если вы конвертируете скрипт, он должен быть исправлен. Вы можете установить инструмент, который может конвертировать CRLF в LF:

dos2unix test.sh

Что касается источников, не уверен, может ли это помочь вам в вашей проблеме. при условии, что скрипт-обертка, исходный код test.sh не вызывается из bash ...

#!/bin/sh
. ./test.sh

... оператор if потерпит неудачу, потому что оболочка Bourne не поддерживает '==', но если вы измените его на ...

#!/bin/bash
myvar="test"
if [ "$myvar" = "test" ]

... скрипт будет получен без ошибок. Обратите внимание, что это зависит от того, как написан сценарий, шебанг может быть проигнорирован

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