Как запустить функцию ~ / .bashrc в качестве элемента входа в GUI

Как @SatoKatsura указал в своем комментарии, (хакерское) использование less выводится на stderr , а grep читает из stdout . Хотя это плохое решение фактической задачи поиска мертвых символических ссылок, оно может работать, перенаправляя stderr на stdout :

less ~/.nvm/versions/node/v5.5.0/lib/node_modules/* 2>&1 | grep "Not a file"
3
19.03.2017, 23:55
1 ответ

По умолчанию ~/. profile исходники ~/.bashrc только если BASH_VERSION непустой, т.е. (из стандартного . profile):

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Под Lightdm сценарии запуска выполняются /bin/sh, который в Debian является симлинком к /bin/dash. Это означает, что когда ~/.profile используется при запуске, BASH_VERSION пуст, и поэтому ~/.bashrc не используется.

Возможные решения

  1. Запускайте функции из ~/bin

  2. Другое решение (если вам нужно несколько функций при запуске) - иметь отдельный файл, скажем ~/.startup_functions , где хранятся все ваши функции, источник файла из .profile и выполняйте функции отсюда. Обратите внимание, что, поскольку вы выполняете их с /bin/dash, вы должны проверить совместимость.

В противном случае, если вы хотите использовать bash в качестве стартовой оболочки и источник .bashrc при запуске, вы можете установить bash как по умолчанию /bin/sh, т.е. запустите

$ dpkg-reconfigure dash 

и следуйте инструкциям.

Если вы хотите определить функции в .bashrc и запускать их при запуске, обратите внимание, что .profile загружает .bashrc только если оболочка интерактивная, если (как по умолчанию) у вас в . bashrc

# If not running interactively, don't do anything
case $- in
    *i*) ;;
    *) return;;
esac

что означает, что вам придется либо удалить этот тест, либо определить нужные вам функции раньше, в любом случае, я бы придерживался запуска функции из ~/bin.

2
27.01.2020, 21:25

Теги

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