Как прочитать пользовательский ввод в сценарии оболочки и заменить строку вводом после завершения выполнения сценария?

Наконец-то я понял. Оказывается, к сети подключался старый сотовый телефон. Хотя я зарезервировал IP-адрес для сервера, маршрутизатор беспечно проигнорировал это резервирование и просто сбрасывал сервер со своего места всякий раз, когда об этом просил телефон. К счастью, остальная часть конфигурации сервера в порядке (или, по крайней мере, не требует серьезной операции ).

Я знал, что роутер дерьмовый, но никак не ожидал такой захватывающей дерьмовости; мне потребовалось довольно много времени, чтобы во всем разобраться. Надеюсь, этот ответ послужит предостережением для кого-то там.

0
01.08.2020, 04:47
3 ответа

Если я неправильно понял вопрос, sedдолжен работать, пока вы добавляете ^и $вокруг регулярного выражения. Например

sed 's/^REFRESH_TOKEN=$/REFRESH_TOKEN={token}/g'будет работать, потому что он будет соответствовать REFRESH_TOKEN=, только если это единственная вещь в строке, секция REFRESH_TOKEN=$(some api call)не должна быть затронута из-за содержимого после=

Вы также можете ограничить область действия sed, выполнив что-то вроде sed '2 s/REFRESH_TOKEN=/REFRESH_TOKEN={token}/g', но это хорошее решение, только если вы уверены , что строка, которую нужно заменить, всегда будет строкой номер 2

2
18.03.2021, 23:15
  REFRESH_TOKEN=$(some api call)
  sed '2 s/^REFRESH_TOKEN=.*/REFRESH_TOKEN='"$REFRESH_TOKEN/" -i "$0"

Здесь sed специально указано модифицировать только вторую строку скрипта

или вместо 2 вы можете использовать диапазон, используя номера строк:

sed '1,5 s/...

или рисунок

sed '1,/^#END-OF-SETTINGS-MARKER#/ s/...

2
18.03.2021, 23:15

Следующая строка инкапсулирует логику скрипта bash:

: ${REFRESH_TOKEN:="$(some api call)"}

Он инициализирует переменную токена обновления только в том случае, если это не было сделано ранее. Начальное значение берется путем запуска вызова веб-API.

Прочтите bash parameter substitutionsв руководстве bash для получения дополнительной информации.

0
18.03.2021, 23:15

Теги

Похожие вопросы