如何将 ~/.bashrc 函数作为 GUI 登录项运行

如何将 ~/.bashrc 函数作为 GUI 登录项运行

我正在使用 Debian Stretch 和 Xfce。我的~/bin目录有很多脚本。这当然在我的 中$PATH,有时当我通过会话和启动 > 应用程序自动启动登录到 Xfce 时,我会从那里运行脚本。在我的~/.bashrc文件中,我有自定义别名和函数。我使用文件中的函数~/.bashrc来编写较短的代码,我不想为 in 中创建整个脚本~/bin。然而,有时我想从我的~/.bashrc文件中运行一个函数作为 GUI 登录项。

我在 中创建了一个测试函数~/.bashrc。然后我将该函数设置为从 运行~/.profile。当我执行以下操作时,该函数成功运行: -bash -l从终端运行 - 在 tty 会话上登录

但是,当我从 LightDM 登录图形 Xfce 环境时,它不会运行。当添加到 Xfce 中的“会话”和“启动”>“应用程序自动启动”时,该功能也不会运行。为了进一步测试,我直接在~/.profile.当我登录 Xfce 时它确实运行。

~/.bashrc登录图形环境时无法运行功能。这是错误吗?是否应该启用一个设置来在 GUI 登录时运行功能?或者,我的系统就是这样设计的吗?谢谢

答案1

仅当默认~/.profile源非空时,即(来自 default ):~/.bashrcBASH_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启动时的 whenBASH_VERSION是空的,因此~/.bashrc不会被获取。

可能的解决方案

  1. 运行函数~/bin

  2. 另一种解决方案(如果您在启动时需要多个解决方案)是有一个单独的文件,说明~/.startup_functions 您保存所有函数的位置,从此处获取文件.profile并从此处执行函数。请注意,由于您使用 执行它们/bin/dash,因此必须检查兼容性。

否则,如果您想在启动时bash用作启动 shell 和源 .bashrc,您可以做的一件事就是设置bash为 default /bin/sh,即运行

$ dpkg-reconfigure dash 

并按照说明进行操作。

如果您想在 中定义函数.bashrc并在启动时运行它们,请注意,仅当 shell 是交互式的时才.profile加载,如果(默认情况下)您有以下测试.bashrc.bashrc

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

这意味着您必须删除此测试或定义之前需要的函数,无论如何,我会坚持从~/bin.

相关内容