我正在使用 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 ):~/.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
启动时的 whenBASH_VERSION
是空的,因此~/.bashrc
不会被获取。
可能的解决方案
运行函数
~/bin
另一种解决方案(如果您在启动时需要多个解决方案)是有一个单独的文件,说明
~/.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
.