Bash интерпретирует специальный символ в одинарных кавычках

Если вы просто обслуживаете администратора с этого веб-сервера,изменить корень, из которого Apache обслуживает страницы, как в:

DocumentRoot "/usr/share/webapps/adminer"

Затем перезапустите службу Apache.

0
16.02.2021, 17:35
2 ответа

bash exits with an error about a bad event

Вас укусила страшная подстановка истории (на символ !внутри ваших двойных кавычек ). Вы можете отключить его с помощью set +H. Этого не произойдет в сценарии BTW.

О разделении слов :вы можете использоватьreadarray(или его псевдонимmapfile)

readarray -t array < <(df -Ph...)
3
18.03.2021, 22:30

Меньший пример (, но, вероятно, не маленький est ), в Bash 4.1:

$ set -H
$ arr=( "$(echo '1 && !/==/' )" )
bash4.1: !/==/': event not found
$ arr=(  $(echo '1 && !/==/' )  )              # no error
$ 

и в Bash 4.4:

$ set -H
$ arr=( "$(echo '1 && !/==/' )" )              # no error
$ arr=(  $(echo '1 && !/==/' )  )              # no error
$ 

Это расширение истории хорошо. Это происходит довольно рано при обработке командной строки и до этого не анализирует всю команду :

.

History expansion is performed immediately after a complete line is read, before the shell breaks it into words, and is performed on each line individually.

Понятия не имею, почему это так работает, почему двойные кавычки имеют значение, но это не единственная ошибка с расширением истории, о которой я слышал.

Вы можете отключить расширение истории с помощью set +Hили set +o histexpand, и в любом случае оно не включено в сценариях по умолчанию.

Также обратите внимание, что Bash 4.1 уже более 10 лет, даже Bash 4.4 (, последний с номером версии 4.x ), был выпущен в 2016 году. а также добавлены полезные функции.

1
18.03.2021, 22:30

Теги

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