В Linux (Ubuntu 11.04) в bash можно ли временно установить переменную среды, которая будет отличаться от обычной переменной только на время выполнения сценария? Например, в сценарии оболочки создание переносимого приложения, сохраняющего в HOME, путем временной установки HOME в папку в текущем рабочем каталоге и последующего запуска приложения.
linux
bash
environment-variables
suchipi
источник
источник
Ответы:
источник
vblank_mode=0 glxgears
. Он работает, но он также говоритvblank_mode=0: command not found
после запуска, тогда как добавлениеenv
этого не вызывает. [тестирование ...] Очевидно, zsh это не нравится (но все еще правильно использует), но bash с этим справляется. Думаю, с этого момента я буду использовать этотenv
метод.VAR1="hello" echo $VAR1
ничего не возвращает?VAR1="hello" bash -c 'echo $VAR1'
источник
VAR=value myScript args ...
PATH=$PATH:XYZ echo $PATH | grep XYZ
нет вывода? 2. В чем разница между использованием и неиспользованиемenv
?PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ
- одинарные кавычки здесь являются ключевымиenv
и неиспользованием?IFS=$'\n' for l in lines; do ... done
Просто положи
в том месте сценария, где вы хотите, чтобы изменение произошло. Поскольку каждый процесс имеет свой собственный набор переменных среды, это определение автоматически теряет какое-либо значение при завершении сценария (а вместе с ним и экземпляра bash с измененным окружением).
источник
export
передаст переменную подоболочкам, но не контролирует родительскую оболочку. Если вы пишете сценарий, который начинается с "#! / Bin / sh" или подобного, ЛЮБАЯ заданная вами переменная исчезнет при выходе из сценария.source
сценарий, он будет выполняться той же оболочкой, в которой вы вводите команду.$HOME
наследовать любые команды, выполняемые из скрипта. А если он этого не сделает, и установка$HOME
только для пользы самого скрипта, тогда ему, вероятно, будет лучше изменить скрипт, чтобы он относился к чему-то другому, кроме$HOME
.