Как обновить все оболочки удара с помощью команды/сценария?

В то время как можно использовать dd для копирования диска как этот, делание так имеет много недостатков:

  1. Место назначения должно быть точно тем же размером или больше, чем источник
  2. После копирования необходимо будет изменить размер разделов для использования любого дополнительного пространства
  3. Вы будете напрасно тратить время, копируя свободное пространство
  4. Любая фрагментация, существующая в старом диске, сохраняется

Используя программу обработки изображений как Ghost4Linux, partclone, или clonezilla, по крайней мере, заботится о номерах 2 и 3. Можно также просто отформатировать новый диск, смонтировать его и скопировать все файлы с cp -ax (как корень), и затем переустанавливают загрузчик на новом диске. Этот метод не страдает ни от одного из вышеупомянутых недостатков.

8
18.06.2011, 17:27
2 ответа

Нет я не думаю, что это возможно. И при этом это не должно быть. Это в основном составило бы способ ввести код в уже запущенную и активную оболочку и изложит значительную угрозу нарушения безопасности.

Много процессов демона разработаны, чтобы сделать это. Типичный путь состоял бы в том, чтобы отправить их ПОНУКАТЬ (зависание) сигнал, который заставляет их повторно запускаться после перечитывания их файлов конфигурации. Вы могли инициировать это с чем-то как:

pkill -HUP daemon_name

Однако при выполнении этого на ударе, удар просто выключается. Это не демон, и система не имеет его, ведут себя как один.

Длинное и за исключением него - то, что Вы, вероятно, не будете продолжать вносить изменения в свой bashrc так часто со временем, и это не будет большая часть проблемы. При внесении изменений необходимо будет просто снабдить файл при необходимости в изменениях в выполнении оболочек.

6
27.01.2020, 20:12

Нет ничего встроенного в удар. Вы могли сказать этому, возможно, перезагружать .bashrc каждый раз это отображает подсказку, через PROMPT_COMMAND.

## Create a timestamp file, dated like the .bashrc that was read.
## There is a small race condition: if .bashrc is modified as the shell is
## just starting, before getting to this line, this instance won't detect
## that modification.
bashrc_timestamp_file=~/.bashrc-timestamp-$$
touch -r ~/.bashrc "$bashrc_timestamp_file"
## Remove the timestamp file on exit. The timestamp file will be left
## behind on a crash.
trap 'rm "$bashrc_timestamp_file"' EXIT HUP TERM INT QUIT
maybe_reload_bashrc () {
  if [[ ~/.bashrc -nt $bashrc_timestamp_file ]]; then
    . ~/.bashrc
  fi
}
if [[ $PROMPT_COMMAND != *maybe_reload_bashrc* ]]; then
  PROMPT_COMMAND="maybe_reload_bashrc
$PROMPT_COMMAND"
fi

Это - большая проблема дополнительные доступы к файлу если это имеет значение. Кроме того, это ставит ограничение Ваш .bashrc: файл должен быть идемпотентом, т.е. необходимо смочь загрузить его несколько раз без вредных воздействий. Например, в отрывке выше, я забочусь для добавления maybe_reload_bashrc кому: PROMPT_COMMAND только если это уже не там.

2
27.01.2020, 20:12
  • 1
    @Kevin я отклонил Ваше редактирование, потому что не было ясно, какие преимущества / ставят дополнительный код в невыгодное положение, мог бы иметь. У Gilles мог быть побочный эффект в памяти, что он избегал путем хранения сравнения метки времени только с, если файл изменился начиная с оригинала и всегда загружающийся на каждой команде, если это изменилось даже однажды. Если Вы думаете, что существует действительно ошибка, оставьте комментарий здесь, и я уверен, что она будет зафиксирована. –  Caleb 18.06.2011, 22:00
  • 2
    @Caleb: Kevin не будет уведомлен Вашим комментарием. Для ссылки должно работать предложенное редактирование touch -r ~/.bashrc $bashrc_timestamp_file после определения источника ~/.bashrc. Я на самом деле почти записал это, но это не необходимо: это было просто сделано полученным .bashrc. Файл метки времени обновляется каждый раз, когда .bashrc загружается, не только на начальной загрузке. –  Gilles 'SO- stop being evil' 19.06.2011, 00:36

Теги

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