在.bashrc
文件中,可以为命令添加别名,例如
alias geditm = 'gedit --display=D1'
现在我可以geditm
在终端中运行并在显示器 D1 中打开 gedit。我很好奇是否有办法定义从 Alt-F2 菜单运行命令的别名,这样我就可以Alt+ F2,键入geditm
并获得相同的结果。
我对此很感兴趣,不仅仅是为了 gedit。
答案1
不是,不是。我不确定细节,但我认为 +Alt只是F2将您运行的命令传递给非交互式、非登录 shell。此类 shell 将无法访问别名,如man bash
:
When bash is started non-interactively, to run a shell script, for
example, it looks for the variable BASH_ENV in the environment, expands
its value if it appears there, and uses the expanded value as the name
of a file to read and execute. Bash behaves as if the following com‐
mand were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the file
name.
因此,您可能认为只需设置BASH_ENV
指向包含别名定义的文件即可。不幸的是,非交互式 shell 无法使用别名。再次引用man bash
:
Aliases are not expanded when the shell is not interactive, unless the
expand_aliases shell option is set using shopt (see the description of
shopt under SHELL BUILTIN COMMANDS below).
您可能认为您可以添加shopt -s expand_aliases
到定义的文件中,$BASH_ENV
但这样做不起作用,因为该文件将被读取,但在不同的 shell 中。
我知道这很令人困惑。归根结底,您无法为Alt+F2对话框提供别名。
解决方法
因此,由于您不能使用别名执行此操作,因此能可以使用脚本来完成:
sudo -H gedit /usr/bin/geditm
这将打开一个新gedit
窗口,向其中添加以下行并保存文件:
#!/bin/bash
gedit --display=D1
使脚本可执行:
sudo chmod a+x /usr/bin/geditm
现在,您可以点击Alt+ F2,写入geditm
,然后该脚本将启动,并启动gedit
所需的选项。
答案2
注意:在重新阅读你的问题并经过更长时间的思考后,我认为 terdon 的答案可能是你想要的,而不是这个;这个太笼统了,需要更多的打字。
如果我理解正确的话,似乎您可能希望将其附加--display=D1
到通过 Alt-F2 运行的任何程序中;这样对吗?经过一番讨论,可能不对,因此请务必同时查看“EDIT2”以获得不同的理解。
如果是这样,似乎你可以创建一个简单的脚本,它将位于你路径中的某个文件夹中,例如~/bin
,只需说
#!/bin/bash
$1 --display=D1
如果将脚本命名为“display”,那么您可以从 Alt-F2 运行display gedit
,并且它应该附加“--display=D1”。
编辑:我想你需要让它可执行,使用chmod +x display
我无法真正轻松地测试这一点,但它应该可以工作(假设这是你想要做的)。
编辑 2:我似乎没有完全理解你的问题,但我认为你仍然可以使用类似的方法。你可以使用命令和标志的替换,而不是指定标志。我想你可以简单地说
$*
代替
$1 --display=D1
然后 Alt-F2 命令将是“display xxxx yyyy ...”