1

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

Сценарий, о котором я говорю, по сути является менеджером списков фронт-эндов /TO-DO cron. Когда пользователь входит в систему (поскольку пользователь получает доступ к своим личным файлам / входит в свою учетную запись), сценарий должен выполняться, проверяя, есть ли какие-либо задачи, которые не удалось напомнить. Если он найдет, всплывет приглашение zenity с запросом следующего ввода.

2 ответа2

2

Сначала создайте свой ~/.bash_login и заставьте его сделать что-то простое (например, echo фразу.)

echo "echo Look at me go" > ~/.bash_login

Затем используйте bash -l как сказал @mata. Флаг -l будет запускать bash, как если бы это была оболочка входа в систему (чтобы убедиться, что она читает ваши файлы настроек.)

1

Хорошо, я нашел решение моей первоначальной проблемы. Это грязный, хотя.

Прежде всего, использование ~/.bash_profile , ~/.bash_login , ~/.profile или даже /etc/profile.d/ должно быть предпочтительным методом (здесь хорошее чтение по теме). Не знаю, почему это не работает для меня; возможно, это как-то связано с обходом моего автоматического диспетчера дисплеев, просто предположение.

Другим решением было бы добавление ярлыков скриптов в глобальный файл, который выполняется при запуске, например /etc/rc.local .

Поскольку мой сценарий требует входа в систему xserver и пользователя, я создал файл initfile, который ожидает после загрузки входа в систему для xserver и пользователя, а затем выполняет сценарий:

#! /bin/bash

### BEGIN INIT INFO
# Provides:          script_file.sh startup at boot
# Required-Start:    $all
# Required-Stop:
# X-Start-Before:    
# Default-Start:     2 3 4 5
# Default-Stop:
# Description: runs '/usr/local/bin/script_file.sh --optional --flags' at startup, when xserver has started and YOURUSERNAME is logged on.
### END INIT INFO

case "$1" in
    start)
        # Wait until X is running and required user logged in:
        count=0
        until [[ "$(tty)" != "\/dev\/tty1" ]] && [[ "$(who | cut -d' ' -f1 | sort | uniq)" == "YOURUSERNAME" ]]; do
            sleep 5
            let count=$count+1
            if [[ "$count" == "10" ]]; then
                echo "Xserver hasn't started or other error occurred. Abort"; exit 1
            fi
        done
        # Run the script as YOURUSERNAME instead of root:
        su - YOURUSERNAME -c '/usr/local/bin/script_file.sh --optional --flags'
    ;;
    stop)
        :
    ;;
esac
exit 0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .