Эти команды не изменять любые файлы - они читают файл, если он существует, то экспортирует переменную в текущем контексте только , и выводит значение на стандартный вывод (обычно на терминал).
Изменение dotfile программно не рекомендуется, потому что есть множество тонких ошибок вы можете столкнуться и из-за сочетания фактического кода с напечатанным кодом (в сценарии модифицирующего) и потому, что вы, по сути, не может быть убедитесь, что целевой файл содержит что-то, что заставляет ваш скрипт вести себя неожиданно. Это, в сочетании с тем, что вы не можете войти в систему как обычный пользователь, являются вескими причинами, чтобы избежать этого в целом. Вы были предупреждены.
Чтобы на самом деле сделать это, вы могли бы просто добавить новую строку с новым значением переменных в конце файла:
echo "USER_PROMPT=haloooo" >> "$VARIABLE_FILE"
Это приведет к дублированию записей, но если вы просто поместив текст и переменные в определение переменной, он должен по крайней мере быть быстрым и довольно безопасным , если ваш файл всегда заканчивается символом новой строки.
Более продвинутая версия будет заменить строку, если она существует:
if grep '^USER_PROMPT=' -- "$VARIABLE_FILE"
then
sed -i -e 's/^USER_PROMPT=.*/USER_PROMPT=haloooo/' -- "$VARIABLE_FILE"
else
echo "USER_PROMPT=haloooo" >> "$VARIABLE_FILE"
fi
Имейте в виду, что если вы хотите поставить произвольный текст в восстановительной стоимости, вы должны убедиться в escape it for sed
. Кроме того, эта команда перезапишет каждую строку, которая начинается с USER_PROMPT=
, так что если вы хотите, у него разные значения в разное время во время вашего скрипта (переменное повторное использование вообще злое) вы только что ввели ошибку. Если вам это нужно, вы можете попробовать replacing only the last occurrence.
Более продвинутые версии могут быть в состоянии обрабатывать отступ кода, код проверки, является ли часть строки или комментария, а также других функций, но в конце концов, сделать это надежно вы должны разобрать структуру языка , который в Баше не простой.
См. [Этот ответ] (http://stackoverflow.com/a/20740691/841108) на очень похожий вопрос. –