在新的 gnome-terminal 和 .bashrc 中运行命令

在新的 gnome-terminal 和 .bashrc 中运行命令

我正在尝试gnome-terminal从 shell 脚本在新窗口中启动一个命令,但似乎.bashrc在调用 gnome-terminal 并执行命令时我的文件没有被获取:

gnome-terminal -t "my title" -e vim

但单独启动时确实如此gnome-terminal

gnome-terminal -t "my title"

(出于测试目的,只需echo "something"在末尾添加一个.bashrc

我也尝试过.bashrc在运行之前明确寻找来源vim,但没有成功:

gnome-terminal -t "my title" -x $SHELL -c "source $HOME/.bashrc; vim"

我是否遗漏了什么?

答案1

不,你是对的。gnome-terminal 在通过 -e 参数运行命令时不会获取 .bashrc。

Bash 和 gnome-terminal 是两个不同的东西。当您不使用 -e 运行时,gnome-terminal 会运行您的默认 shell(恰好是 bash)。当您使用 -e 运行时,gnome-terminal 会运行您提供的命令(未加载 bash,因此不会获取 .bashrc)。

您的最后一个例子也不起作用。$HOME 是 bash 中的一个变量,不可用。此外,source 是一个 bash 命令,而 vim 可能需要一个路径。

我认为,实现此目的的最佳方法是制作包装脚本。

在您的路径中的某个地方(我将 ~/.bin/ 添加到我的路径中)创建一个名为 vim-x 的文件并将其设置为可执行文件。

#!/bin/bash
源 $HOME/.bashrc
vim "$@"

然后你可以运行:

gnome-terminal -t "my title" -e /home/user/.bin/vim-x

答案2

我在以下帮助下找到了问题此回复

实际上,这.bashrc是有来源的,但由于以下几行而没有完全处理:

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

为了解决这个问题,最干净的方法是强制 shell 实例以交互模式运行(如下图所示)这里):

gnome-terminal -t "my title" -x $SHELL -ic "vim"

相关内容