Ошибка команды переменной функции Bash - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть такой bash-скрипт с функцией

_launch()
{
  ${1}
}

testx()
{
  _launch "TESTX=1 ls -la"
}

testx

Я получаю сообщение об ошибке «Команда TESTX = 1 не найдена» в функции _launch.Зачем?Когда я запускаю TESTX=1 ls -la прямо на оболочке, все работает нормально.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы получаете ошибку, потому что сначала просматриваете инструкцию, чтобы увидеть, есть ли у нас присвоение переменной, а затем выполняете расширение параметра.В вашем случае bash не распознает, что вы хотите расширить среду для вашей команды ls, и рассматривает TESTX = 1 как команду для выполнения.

По той же причине следующее не делает установить переменную bash ABC:

x='ABC=55'
$x

Это вывело бы ABC = 55: команда не найдена .

0 голосов
/ 26 февраля 2019

Не рекомендуется использовать переменные для хранения команд.См. BashFAQ / 050

Пока вы работаете с исполняемыми файлами, а не со встроенными оболочками, вы можете сделать это:

_launch() {
    env $1
}

Это не будет игратьхорошо, если у вас есть буквальные пробелы в значениях, используемых в var=value парах или аргументах запускаемой команды.

Вы можете решить эту проблему, просто передав команду в функцию запуска и задав переменные в вызове функции.сам по себе, вот так:

_launch() {
    #       your launch prep steps here...
    "$@"  # run the command
    #       post launch code here
}
TESTX=1 TESTY=2 TESTZ=3 _launch ls -la

Переменные будут переданы запущенной команде как переменные среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...