
У меня есть скрипт bash, который должен выполнять ряд команд. Команды работают нормально, если их вводить в терминале, но когда я пытаюсь выполнить их из скрипта, они не работают, поэтому я предполагаю, что это что-то, специфичное для среды.
В сценарии у меня есть
exec "$cmd"
и это не работает, хотя если я копирую содержимое $cmd и вставляю в терминал, то все работает нормально.
Как сохранить текущую среду при запуске скрипта? Или у вас есть другие идеи, что это может быть?
решение1
Вместо этого поместите команду в массив.
arr=(foo bar baz quux)
exec "${arr[@]}"
решение2
Введите set -o allexport
в верхней части вашего скрипта bash. Это должно автоматически экспортировать все переменные, которые вы определяете. (Обратите внимание, что это считается плохим стилем; лучше было бы просто экспортировать нужные переменные).
решение3
Если все команды должны быть запущены из одного каталога, вы можете использовать
cd /d $Location
в начале скрипта, чтобы указать место для запуска команд.
cd — это команда смены каталога. /d — этот параметр позволяет cd одновременно сменить и диск, и каталог.
если вы хотите, чтобы команда запускалась, скажем, из D:\scripts без /d, вам нужно будет
D:
cd \scripts
но с помощью приведенной выше команды вы можете сделать это в одну строку
cd /d D:\scripts
-Редактировать еще раз-
Прошу прощения, там четко написано BASH, но по какой-то причине я прочитал это как BATCH. В будущем буду внимательнее.