Запустите скрипт каждый раз, когда оболочка порождена

Мне нужен способ сделать сценарий выполненным в любом случае при всех пользователях и автоматически запуститься, если какая-либо новая оболочка порождена. Какие-либо идеи?

0
задан 13 December 2014 в 11:45

2 ответа

Я не уверен, под чем Вы подразумеваете 'выполненный в любом случае', таким образом, я не могу ответить что часть, но для остальных.

https://help.ubuntu.com/community/EnvironmentVariables имеет большое объяснение под разделом 'System-wide environment variables''.

, Но вот то, что необходимо знать. Оболочками входа в систему и интерактивными оболочками невхода в систему управляют различные файлы. Таким образом, если Вы захотите, чтобы Ваш сценарий работал, когда ВСЕ оболочки будут запущены, необходимо будет получить сценарий в обоих местах или поместить его в оба места.

Делают сценарий выполненным, когда любая оболочка входа в систему выполняется:

Кавычка из вышеупомянутого источника: Файлы с .sh расширением в/etc/profile.d каталоге выполняются каждый раз, когда оболочка входа в систему удара вводится (например, при входе в систему от консоли или по ssh), а также DisplayManager, когда настольная сессия загружается.

Так просто помещают Ваш сценарий в/etc/profile.d каталог и дают ему .sh расширение.

Делают сценарий выполненным, когда любая интерактивная оболочка невхода в систему выполняется:

В значительной степени то же как прежде, кроме этого времени это не каталог, а файл.

/etc/bash.bashrc будет получен, когда любая интерактивная оболочка невхода в систему будет выполняться. Это означает, что можно или поместить содержание сценария непосредственно в/etc/bash.bashrc, или можно получить сценарий оттуда. Если Ваш сценарий расположен в/etc/myscript.sh, можно получить его путем добавления source /etc/myscript.sh в/etc/bash.bashrc файл.

1
ответ дан 3 August 2019 в 23:03

... почему? Вероятно, существует лучшее решение, поэтому если Вы заявляете, почему, вероятно, мы можем предлагать некоторые более звуковые решения. Помните, что оболочка используется не только пользователями, но также и большим количеством системных процессов.

Так или иначе, bash (оболочка по умолчанию), когда запускает его, будет (но видеть позже), выполняют ряд сценариев в масштабе всей системы. Оболочка может запуститься как интерактивная или неинтерактивная, и как вход в систему или не войти в оболочку (см. man bash и поиск "ВЫЗОВА" для деталей).

В основном, когда пользователь запускает оболочку в терминале на графической сессии, удар вызывается как интерактивный, оболочка невхода в систему и выполнится /etc/bash.bashrc:

Когда интерактивная оболочка, которая не является оболочкой входа в систему, запускается, удар читает и выполняет команды от/etc/bash.bashrc и ~/.bashrc, если эти файлы существуют. Это может быть запрещено при помощи - norc опция. - rcfile опция файла вынудит удар считать и выполнить команды из файла вместо/etc/bash.bashrc и ~/.bashrc.

Таким образом, можно добавить команды там. Будьте осторожны, хотя, ошибки здесь могут сделать Вашу систему очень трудно для восстановления.

резюме (протестирован)

Править /etc/bash.bashrc и, ПОСЛЕ строки, которая говорит

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

добавьте, например:

echo "Hello $USER, you started a new shell"

и от терминала:

[romano:~] % bash
Hello romano, you started a new shell
romano@RRyS:~$

Если Вы хотите запустить скрипт здесь, осторожны и проверяете дважды, как

if [ -x /full/path/to/script ]; then 
     /full/path/to/script  # double check here 
fi

проверьте это дважды /full/path/to/script не звонит bash в интерактивном режиме, или у Вас будет хороший бесконечный цикл здесь.

протест:

Это нисколько не осуществляется: другие оболочки (zsh, tcsh, dash) будет вести себя по-другому и будет использовать различные файлы. И очевидно любой пользователь может назвать оболочку с

bash --norc --noprofile 

и пропустите файлы сценария.


В 14.04 существует даже пример /etc/bash.bashrc (вероятно, остаток, от когда Ubuntu, переключенная на sudo...) подсказывать пользователь для использования sudo вместо того, чтобы войти в систему как корень:

# sudo hint
if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then
    case " $(groups) " in *\ admin\ *)
    if [ -x /usr/bin/sudo ]; then
        cat <<-EOF
        To run a command as administrator (user "root"), use "sudo <command>".
        See "man sudo_root" for details.

        EOF
    fi
    esac
fi

... но это - археология кода ;-).

3
ответ дан 3 August 2019 в 23:03

Другие вопросы по тегам:

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