Вопрос оболочки Bash: Ошибка возникает при запуске простого сценария оболочки

#linux #shell

#linux #оболочка

Вопрос:

test.sh:

 #!/bin/bash
echo "helloworld"
  

Я установил режим файла на 755. когда я пытаюсь запустить скрипт, набрав «./test.sh «, Я получаю это:

 helloworld
./test.sh: line 2: /root: is a directory
  

что происходит???

Комментарии:

1. что происходит, когда вы выполняете ‘/bin/bash -x ./test.sh; echo $?’

2. Вы перенаправляете вывод? Как именно вы это выполняете? Какой пользователь?

3. Вы уверены , что смотрите на то же самое, test.sh что и выполняете? cat ./test.sh;./test.sh было бы интересно посмотреть.

4. не перенаправляет вывод. Я также пробовал root и обычного пользователя.

Ответ №1:

Введите exit и посмотрите

 #!/bin/bash
echo "helloworld"
exit
  

Ответ №2:

Я бы поискал забавные вещи в обработчиках ошибок / сигналов и / или PROMPT_COMMAND

Итак,

 echo $PS1
echo $PROMPT_COMMAND
trap
  

было бы в порядке.

Другой подход заключается в том, чтобы ограничить запуск bash (что отключает множество опций)

 #!/bin/bash -r
  

Хотя последнее может устранить странное поведение, это не объясняет, что произошло

Ответ №3:

Я предполагаю, что отредактированный из Windows / повторно использованный Windows-файл с r внутренней частью, который вы переместили с помощью вставки exit ?

Ответ №4:

Я получил эту ошибку, когда я случайно поставил ~ в последней строке моего скрипта при поиске клавиши escape в vim. Поскольку vim использует тильды для заполнения строк вне файла, ошибка была почти незаметна. Удаление строки, содержащей тильду, помогло мне избавиться от

 /root: Is a directory
  

ошибка.