Freebsd: Недопустимое имя переменной

Я пытаюсь запустить следующую команду:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Но получаю:

Illegal variable name.

Как это исправить?

Кажется, он отлично работает под Ubuntu 20 (под WSL). Убедитесь, что sh работает с правильной оболочкой. FreeBSD не использует bash по умолчанию. «Недопустимое имя переменной» — распространенная ошибка csh для таких вещей, как $?.

paxdiablo 20.12.2020 13:29

Попробуйте использовать одинарные кавычки вместо двойных кавычек вокруг выражения.

Richard Smith 20.12.2020 13:50

Я не думаю, что (t)csh поддерживает $().

Shawn 20.12.2020 14:03

Во FreeBSD sh не является bash, и bash не установлен по умолчанию, но вы пометили его как bash. Вы действительно используете bash?

Rob 20.12.2020 14:32

Вы явно используете sh здесь; почему это помечено csh?

tripleee 18.06.2022 20:17
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
5
1 372
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

  • Сначала загрузите скрипт с помощью:
    curl -O https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
  • Затем запустите скрипт с помощью ksh или bash:
    bash install.sh

Я проверил этот код сценария установки, и он не проходит статический анализ shellcheck.net. Так что у его авторов больше домашней работы.

Фактическая проблема, с которой столкнулся автор, заключается в том, что tcsh не знает о "$(...)", и это интерпретируется как (недопустимая) переменная, поскольку они используют двойные кавычки. Замена на ' должна исправить это. Просто к вашему сведению.

Martin Tournoij 20.12.2020 17:55

@MartinTournoij У меня такое ощущение, что замена $(command) на обратную кавычку может не сильно помочь, так как для запуска всего сценария установки требуется оболочка POSIX.

Léa Gris 20.12.2020 18:47

@MartinTournoij нет, это не работает с '

Shery 29.12.2020 14:46

Проверьте оболочку, установленную по умолчанию в вашей FreeBSD:

root@freebsd-13:~ # echo "$SHELL"
/bin/csh

Если это csh (оболочка C), переменные должны быть установлены так:

root@freebsd-13:~ # set test=`echo "hello"`
root@freebsd-13:~ # echo "$test"
hello

Следующий пример не будет работать:

root@freebsd-13:~ # set test = "$(echo "hello")"
Illegal variable name.

Но вы можете установить его с помощью sh следующим образом:

root@freebsd-13:~ # sh
# test = "$(echo "hello")"
# echo $test
hello
#

Другие вопросы по теме