сценарий оболочки выдает ошибку

Символ тильда расширяется оболочкой перед выполнением команды. Он будет заменен значением $HOME. Таким образом, утилита ln, создающая симлинк, никогда не увидит тильду, только полный путь. Этот путь будет сохранен в симлинке.


В Linux нет возможности сделать симлинк переменной. Они обрабатываются ядром. Ядро не поддерживает переменные окружения.


BSD допускает такие ссылки. Они называются вариантные символические ссылки. Вы можете сделать что-то вроде этого:

$ ln -s ’${variable}’ linkname
$ ls -l linkname
lrwxrwxrwx 1 root root 6 Sep 29 12:33 linkname -> ’${variable}’

С помощью varsym эти переменные могут быть установлены:

varsym variable=value cat linkname
[...] contents of file with name value [...]

0
23.03.2018, 18:40
3 ответа

В сценарии нет ничего, что могло бы вызвать эту ошибку. Если вы запустите скрипт с sh./script.sh, он выдаст

 TEST LAST LOOP 

в качестве вывода. Если запустить его с bash./script.sh, вы получите тот же вывод, но с дополнительной ошибкой «ожидается целочисленное выражение», поскольку tне является целым числом (, это также может произойти, если вы запустите с sh, если ваш shреализуетсяbash). Если вы запустите его с ./script.sh, оболочка, скорее всего, выдаст сообщение «Нет такого файла или каталога», поскольку вы не добавили правильную строку #!-.

В этом скрипте вы можете использовать #!/bin/shвместо строки #!-, так как вы используете только стандартные функции POSIX.

Тест [ t -eq 1 ]никогда не будет верным, так какt(символ )не является целым числом. Если вы устанавливаете переменную tв целое число, используйте [ "$t" -eq 1 ]в тесте.


Единственный способ заставить оболочку сказать «неожиданный конец файла» — это преобразовать сценарий в текстовый файл DOS и запустить его с помощью bash.

Если вы получаете эту ошибку, то файл сценария, вероятно, является текстовым файлом DOS (, возможно, из-за того, что он был создан на компьютере с Windows ). Вы должны запустить dos2unixв сценарии.

См. вопросы, связанные сdos2unix.

5
28.01.2020, 02:16
  • замените #!на #!/bin/shили запустите sh./script.sh, и вы должны установить t как целое число $t, а не t.
0
28.01.2020, 02:16

Отсутствие строки шебанга #!/bin/shи tне определено

0
28.01.2020, 02:16

Теги

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