Как я могу запросить системный путь rc, установленный во время компиляции, с помощью -DSYS_BASHRC=?

Это не bash conf, это tmux confs, поэтому вам следует поискать информацию об этой опции в справке tmux.

Быстрый поиск дал мне это:

If -g is used, the change is made in the global environment; otherwise, it is applied to the session environment for target-session.

1
07.07.2019, 19:11
1 ответ

Насколько я могу судить, исходный код Bash не различает SYS_BASHRCи другие включенные rc-файлы после компиляции. Кроме того, SYS_BASHRCможет быть неопределенным, и полученный двоичный файл вообще не будет использовать системный rc.

Однако все файлы, используемые процессом, могут быть обнаружены с помощью strace. Bash включает rc-файлы, только если он запускается в интерактивном режиме, поэтому:

echo | strace -e openat -o tmp.log bash -i 2>/dev/null

Результирующий файл tmp.logбудет содержать нужную информацию:

openat(AT_FDCWD, "/etc/bash.bashrc", O_RDONLY) = 3

К сожалению, он также будет содержать большое количество строк, например. для библиотек (и перенаправление на /dev/null ). Я не уверен, как выбрать правильную строку в каждом случае. Но на практике я думаю, что это, скорее всего, будет первая не -библиотека в /etc/:

.
grep -v O_CLOEXEC tmp.log | grep \"/etc | head -n 1 | sed -e 's/.*"\(.*\)".*/\1/'
2
27.01.2020, 23:30

Теги

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