Синтаксическая ошибка: "(" unexpected (expected word) - in my bash script

Магия состоит из двух частей.

Во-первых, echo заменяется псевдонимом на e (echo также будет работать, если вы не хотите использовать псевдоним); во-вторых, мы используем «расширение скобок»:

$ e mv {,_}test_1.py              # Try to see if it works as expected.
mv test_1.py _test_1.py

          # If the arguments are what you want:

$ mv {,_}test_1.py                # Press ↑ (up arrow), remove `e`

$ !*                              # OR: Type `!*` --> last line after arg 0.
$ mv {,_}test_1.py                # If `histverify` is set.

! * может быть расширен пробелом, если вы включите magic-space или если вы установите shopt -s histverify после того, как вы нажмете Enter, вам будет предоставлена ​​возможность просмотреть эффект расширения истории, прежде чем нажать Enter (снова) для выполнения.

Другой пример:

$ e mv test_1.py{,.org}
mv test_1.py test_1.py.org        # The result of the brace expansion.
                                  # Review it, and if it is ok:
$ !*                              # type !* (use either space or enter)
                                  # That will depend on how you setup it.

$ mv test_1.py{,.org}        # The command appear again (enter to execute).
$

Существует также расширение истории ! # , что означает набранную командную строку и выбор первой команды : 1 . Если у вас включен magic-space, введите mv test1.py! #: 1 и нажмите пробел, команда изменится:

$ mv test_1.py !#:1                # Press space.
$ mv test_1.py test_1.py           # The command line change to this.
$ mv test_1.py test_1.org          # Edit and press enter to execute.

1
22.11.2016, 18:20
2 ответа

Попробуйте :

chmod 755 "my_script.sh"

Затем запустите его просто так

my_script.sh

Строка #!/bin/bash в начале используется, чтобы указать вашей системе, с какой оболочкой вы должны запустить скрипт. Я думаю, что вы отменяете это, выполняя его с помощью sh my_script.sh. Вы также можете явно написать /bin/bash my_script.sh. Также, если в вашем скрипте есть синтаксис, специфичный для bash, вам следует изменить расширение на .bash, чтобы быть более явным.


EDIT

Похоже, у вас нет bash в вашем дистрибутиве FreeBSD (оболочкой по умолчанию во FreeBSD является tcsh). Вы можете найти здесь руководство по установке bash на FreeBSD. После этого решение, которое я предоставил, должно работать правильно. Желаю удачи.

3
27.01.2020, 23:14

Очевидно из she-bang, этот сценарий предназначен для запуска bash , а не sh (даже хотя синтаксис больше похож на синтаксис zsh из-за переменных без кавычек).

Вы захотите запустить его с помощью bash или zsh . Если эти оболочки недоступны, вы можете установить их или, альтернативно, перевести этот сценарий в синтаксис sh , который здесь должен быть простым.

Язык sh (как Bourne, так и POSIX) не имеет оператора <(...) . Это происходит из ksh , а также поддерживается bash и zsh . echo -e является нестандартным, и даже с bash и ksh работает только в некоторых средах.

Стандартный эквивалент sh :

var1="var1"
var2="var2"
var3="var3"

cat < "$var1" || exit
printf '<something>\n' || exit
cat < "$var2/file123.txt" || exit
printf '</something>\n<something2>\n' || exit
cat < "$var3//file456.txt" || exit
print '</something2>\n'
3
27.01.2020, 23:14

Теги

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