jq добавить или обновить значение с несколькими --arg

Одна из причин быть осторожной с sed и символическими ссылками заключается в том, что когда sed изменяет файл на месте, он уничтожает ссылку и создает новый файл. Например:

bash-[622]$ echo abc > a
bash-[623]$ ln -s a b
bash-[624]$ ls -la
total 32
drwxr-xr-x   2 tim      staff        233 Mar  2 10:31 ./
drwxrwxrwt   4 root     sys          612 Mar  2 10:29 ../
-rw-r--r--   1 tim      staff          4 Mar  2 10:31 a
lrwxrwxrwx   1 tim      staff          1 Mar  2 10:31 b -> a
bash-[625]$ cat a
abc
bash-[626]$ cat b
abc
bash-[627]$ sed -i 's/abc/def/g' b
bash-[628]$ ls -la
total 32
drwxr-xr-x   2 tim      staff        233 Mar  2 10:31 ./
drwxrwxrwt   4 root     sys          612 Mar  2 10:29 ../
-rw-r--r--   1 tim      staff          4 Mar  2 10:31 a
-rw-r--r--   1 tim      staff          4 Mar  2 10:31 b
bash-[629]$ cat a
abc
bash-[630]$ cat b
def

Для более безопасной работы с символическими ссылками, если ваша версия sed - GNU Sed, вы можете использовать параметр sed - follow-symlinks .

bash-[632]$ echo abc > a
bash-[633]$ ln -s a b
bash-[634]$ ls -la
total 32
drwxr-xr-x   2 tim      staff        233 Mar  2 10:33 ./
drwxrwxrwt   4 root     sys          612 Mar  2 10:32 ../
-rw-r--r--   1 tim      staff          4 Mar  2 10:33 a
lrwxrwxrwx   1 tim      staff          1 Mar  2 10:33 b -> a
bash-[635]$ cat a
abc
bash-[636]$ cat b
abc
bash-[637]$ sed --follow-symlinks -i 's/abc/def/g' b
bash-[638]$ ls -la
total 32
drwxr-xr-x   2 tim      staff        233 Mar  2 10:33 ./
drwxrwxrwt   4 root     sys          612 Mar  2 10:32 ../
-rw-r--r--   1 tim      staff          4 Mar  2 10:33 a
lrwxrwxrwx   1 tim      staff          1 Mar  2 10:33 b -> a
bash-[639]$ cat a
def
bash-[640]$ cat b
def

Как видите, когда используется - follow-symlinks , символическая ссылка сохраняется, и операция sed фактически применяется к файлу a .

Итак, в вашем примере, если вы разорвали символическую ссылку между /etc/grub.conf -> /boot/grub/grub.conf , вы ожидаете, что ваши изменения будут происходят только для того, чтобы узнать, что они на самом деле не применяются к /boot/grub/grub.conf , и вы можете потратить значительное время на устранение неполадок, почему ваша загрузка не работает должным образом.

1
22.11.2017, 21:52
0 ответов

Теги

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