Можно ли изменить исполняемый файл, который уже запущен?

Если вы хотите действовать, только если строка не -пуста, используйте параметр по умолчанию при ссылке на переменную:

master="$(read_json -f.vcs.json -k git.master)"

Если команды подоболочки не возвращают вывод, переменные будут нулевыми. Затем вы можете использовать это с заменой по умолчанию:

do-a-thing "${master-master}" # if 'master' is null, use the default value 'master'
                              # otherwise, use the contents of the variable
1
30.12.2020, 08:03
1 ответ

Linux и большинство других операционных систем Unix не позволяют вам фактически изменять исполняемый двоичный файл. Если вы попытаетесь открыть такой файл для записи, вы получите ETXTBSYошибку (Текстовый файл занят ). Это связано с тем, что двоичный файл может отображаться в памяти, и изменение файла приведет к изменению двоичного файла, почти наверняка нежелательным образом. Ядро также может не корректно обработать этот случай.

Однако вы можете скопировать файл в сторону, изменить его там, а затем вызватьrename(2)(или что-то, что его использует, например mv(1)), чтобы переименовать новый двоичный файл поверх старого. Это работает, потому что старый двоичный файл все еще находится на диске, но недоступен ни по какому имени файловой системы, и остается таковым до тех пор, пока последний пользователь не закроет его. Если вы повторно -запустите двоичный файл, он подхватит новую версию.

0
18.03.2021, 22:39

Теги

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