#bash #variables #compare #difference
#bash #переменные #Сравнить #разница
Вопрос:
Я пытаюсь сохранить список переменных, измененных моим скриптом, для последующей перезагрузки с помощью set.
initialVars="`set -o posix ; set`"
source script
saveTime="$(date "%Y-%m-%d %T")" #first time declaring this var
saveVars="`grep -vFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars=`"
echo $saveVars > snapshot.sav
unset saveVars
На первый взгляд кажется, что это работает нормально, но я замечаю, что snapshot.sav не содержит большого количества переменных, которые, несомненно, были изменены скриптом, но даже не были инициализированы до того, как я установил initialVars. Например, он не включает время сохранения.
Я проверил содержимое initialVars, переменных, которые еще не были инициализированы, там нет, но присутствуют, если я посмотрю на (set -o posix ; set) перед grepping.
Что-то не так с greps? Я довольно новичок в bash, поэтому, возможно, я чего-то не вижу.
Извините, если мой вопрос немного запутанный, у меня пока нет большого опыта в программировании устранения неполадок.
Ответ №1:
Добавьте -x
опцию, чтобы она соответствовала целым строкам:
saveVars="`grep -vxFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars=`"
Также нет необходимости в saveVars
переменной. Вы можете просто сделать:
grep -vxFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars= > snapshot.sav
Комментарии:
1. -x решил мою проблему, большое спасибо! А также спасибо за совет по ненужному var, так намного аккуратнее.