Почему оболочка входа в bash без взаимодействия игнорирует / etc / profile при вызове su -?

Вы можете использовать сторонний инструмент, devilspie2 , чтобы управлять поведением окон приложений при их создании. Следующий файл конфигурации devilspie2 не позволит отображать окно Hangouts во всех рабочих областях:

if (get_window_name() == "Google Hangouts") then
    unpin_window();
end

Сохраните его в файле с именем hangouts.lua в каталоге конфигурации devilspie2 (для Fedora 24 это . config / devilspie2 / .

Наконец, убедитесь, что devilspie2 запускается при запуске среды рабочего стола, и все будет в порядке.

2
10.01.2017, 13:56
1 ответ

Он делает то, что написано на банке.

Вспомните документацию :

Когда Bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром - login , он сначала читает и выполняет команды из файла / etc / profile

. Он правильно объясняет, что он читает и выполняет / etc / profile как интерактивную оболочку входа в систему или как неинтерактивная оболочка с опцией - логин .Это не означает, что это не интерактивная оболочка входа в систему, обозначенная $ 0 , начинающаяся с дефиса.

Однако такое поведение является намеренным, и его можно изменить во время компиляции, раскомментировав параметр времени компиляции, найденный в config-top.h :

/* Define this to make non-interactive shells begun with argv[0][0] == '-'
run the startup files when not in posix mode. */
/* #define NON_INTERACTIVE_LOGIN_SHELLS */

Это действительно вызывает вопрос однако, почему это поведение было реализовано, когда это не так, IMHO , как можно было бы разумно ожидать, что оно будет работать, особенно когда оно не реализовано таким образом в других оболочках.

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

Вот способ решения исходной проблемы, который работает с bash :

$ su - someuser -c 'bash -l -c tmux'
2
27.01.2020, 22:10

Теги

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