Я хочу установить переменную окружения в bash, которая начинается с цифры. Окружающая среда процесса может содержать такие переменные (это просто все равно). Но в оболочке вам нужно создать переменные, а затем экспортировать их, чтобы они переходили в среду. Есть ли способ добавить какое-то значение в среду оболочки, не касаясь переменных, или создать переменную, начинающуюся с цифры?bash переменные окружения, начинающиеся с цифры
ответ
Единственными допустимыми типами начального символа для переменных bash являются буквы и символы подчеркивания.
Это верно для переменных. Но процессная среда просто не волнует. Теперь, как это сделать, без ограничений переменной bash? – valeryz
@valeryz: вам нужно будет манипулировать средой в программе на C и использовать 'execve()', чтобы передать его в bash. Это не удобно или разумно. Вы также можете создать несколько записей для одной переменной таким образом - это тоже не удобно или разумно. –
Почему вы хотите это сделать? Вы можете сделать:
export _1="some value"
или
export a1="some value"
Причина, по которой вы не можете делать то, что вы спрашиваете, что переменная типа «$ 1» будет путать с позиционным параметром $1
.
Потому что я делаю это в Cygwin для утилиты WinDDK «build», которая хочет переменную «386». Я понимаю причины, по которым он не работает, как вы это понимаете. – valeryz
Единственный способ, которым я мог думать, начав новую оболочку с помощью env
:
env 0FOO=BAR /usr/bin/bash
Я попробовал это под Cygwin, и это, казалось, работало.
Это хорошо, спасибо! Я обнаружил, что могу перейти на bash 4.1, но ваш подход должен работать в любом месте, для меня необходим дополнительный процесс bash. – valeryz
Умный; Интересно, если это ошибка или функция в 'env'. –
Как отмечает @valeryz, для идентификаторов в блоке рабочей среды нет одинаковых ограничений (IAFAIK - если кто-то видел некоторые, прокомментируйте), как есть в переменных bash. Поскольку env не нарушает правила bash для переменных bash (это вообще обходит их), это использование казалось бы кошерным для меня. –
обработка требуется кропотливая и утомительная и не страшно разумным, но (в общих чертах, проверка ошибок на malloc()
опущены):
char **env = environ;
while (*env != 0)
*env++;
char **newenv = malloc((env - environ + 1) * sizeof(*newenv));
memcpy(newenv, environ, (env - environ) * sizeof(char *));
newenv[env - environ] = "386=pygmalion";
newenv[env - environ + 1] = 0;
char *args[] = { "modded-env-bash", 0 };
execve("/bin/bash", args, newenv);
exit(1);
Почему бы не putenv() или setenv() работать? – valeryz
Для этого требуется индивидуальное программирование (хотя ясно, что имя и значение env var могут быть собраны из командной строки), и не так аккуратно, как использование программы env, предложенной Bert F. –
@valeryz: Они могли бы - они не могли. Есть достойный шанс 'putenv()' будет работать, но он может проверить, что вы поставляете; есть неплохая возможность 'setenv()' не будет работать, потому что он принимает имя и значение отдельно и может проверять имя (хотя POSIX только говорит, что знаки «=» не разрешены, а все остальное - честная игра).ОК, перепишите код, чтобы использовать 'setenv()' ... получайте удовольствие. Лучше использовать команду 'env', если она работает там, где вам это нужно. –
- 1. Уменьшить переменные окружения bash
- 2. Raspbian: Сбросить переменные окружения Bash
- 3. Почему bash $() задает переменные окружения?
- 4. Переменные экземпляра, начинающиеся с `@ _`
- 5. BASH SCRIPT, переменные окружения и PID
- 6. Как заставить Supervisord читать переменные окружения bash
- 7. Переменные окружения Bash и поиск каталогов установки
- 8. Преобразование JSON в переменные окружения bash
- 9. сценарий bash не подбирает переменные окружения
- 10. Bash: переменные окружения для каждого входа
- 11. Каковы мои переменные окружения?
- 12. Переменные окружения с Супервизором
- 13. Клавиши соответствия Redis, начинающиеся с цифры [KEYS]
- 14. Regex: Соответствующие цифры, начинающиеся с 4-9?
- 15. wordpress запрос все сообщения, начинающиеся с цифры
- 16. Найти все строки, начинающиеся с цифры
- 17. Regex: удалять строки, не начинающиеся с цифры
- 18. Julia DataFrame колонки, начинающиеся с цифры?
- 19. Переменные окружения Supervisord
- 20. GNU Screen: Переменные окружения
- 21. оболочка korn и переменные окружения
- 22. Переменные пути и переменные окружения
- 23. AWS EC2 заданные переменные окружения
- 24. Как загрузить переменные окружения, когда fork sub shell в bash?
- 25. Удалить слова, начинающиеся с pattern in bash
- 26. Bash asterisk опускает файлы, начинающиеся с '.'?
- 27. Неограниченные переменные окружения от рельсов
- 28. Переменные окружения (process.env.VCAP_APP_PORT)
- 29. Монодроидные переменные окружения
- 30. Переменные окружения Hadoop
Хорошо, я думаю, что я нашел ответ в Баш-4.1 список изменений: Bash теперь передает переменные среды с именами, которые недействительны имена переменных оболочки через среду, переданную дочернему процессу . Просто нужно обновить. – valeryz
Похоже, что изменение 4.1 означает, что если у меня есть переменная 386 = 1 в моем родительском процессе, то когда я форк, она не удалит ее, и она будет доступна для детей. – valeryz