是否可以创建类似宏的用户定义 shell 命令?

是否可以创建类似宏的用户定义 shell 命令?

是否可以运行单个缩短的命令,进而启动多个较长的键入命令?

例如,

$ kontact & rekonq

当传递到我的终端时,会打开两个应用程序。我可以创建自己的命令来包含此操作并缩短执行它所需的时间吗?

答案1

我认为你正在寻找的是一个 shell 脚本。 shell 脚本基本上可以让您将可以在 shell 中输入的任何内容转换为命令。因此,例如,要从 shell 运行这两个程序,您可以运行:

$ kontact &
$ rekonq &

要将它们放入 shell 脚本中,请在文本编辑器中打开一个新文件,然后输入以下行:

#!/bin/bash
kontact &
rekonq &

您会注意到这与您在 shell 中键入的内容非常相似 - 唯一的区别是#!/bin/bash顶部对齐(该网站已帮助我们以不同的颜色呈现)。该行告诉系统这是一个应该由 bash 执行的脚本。

最后,保存文件后,您需要使其可执行。chmod +x file-name

现在,假设,如果您将其保存为只需在 shell 中输入即可,那么这两个程序都应该启动。/home/your-username/bin/run-my-programs~/bin/run-my-programs

请注意,许多发行版都有登录脚本,它们会bin自动将 $HOME 中的目录添加到命令搜索路径中,因此这是放置您想要轻松运行的 shell 脚本的好地方。不过,只有在您登录时存在的情况下,他们才会执行此操作$HOME/bin。然后您可以省略路径并只需键入run-my-programs。显然,您需要小心命名脚本,以免它们与系统上的其他程序发生冲突 -ls例如,如果您这样命名,就会令人困惑和惊讶!


上面的 shell 脚本其实并没有那么有用。当您的程序更复杂时它更有用。例如,这是我在工作中使用的真实脚本:

#!/bin/sh

xterm -geometry 80x24+0+0 -T 'Bennu-DBA' -e ssh bennu -t 'screen -d -R -S status' &

xterm -geometry 80x24+0+342 -e screen -S 'bservers' -c ~/.screenrc-bservers &
xterm -geometry 80x9+0+684 -T 'df-graph' -xrm '.xterm.vt100.allowTitleOps: no' &

( cd ~/src/haruhi.metrics.net/operations/backup/bennu && xterm -geometry 80x24+0+827 -T 'Bennu-Conf' ) &
( cd ~/src/haruhi.metrics.net/operations/backup/phoenix && xterm -geometry 80x24+509+827 -T 'Bennu-Conf' ) &

xterm -geometry 177x77+509+0 -T 'Console' -e screen -c ~/.screenrc-bconsole  &

这节省了手动放置窗口和调整窗口大小的大量工作(所有这些-geometry选项)。所有-e选项都会在其中启动适当的程序。

答案2

您是否尝试过创建一个别名

$ alias macro="kontact & rekonq"
$ macro

在哪里是你的快捷方式的名称。

答案3

是的。这很常见。将您想要运行的命令放入文本文件中,通常带有.sh扩展名(这是约定,不是必需的)。你可能必须这样做chmod +x <filename>。然后你只需运行<filename>.sh./<filename>.sh。我通常会bin/在主目录之外为这样的脚本创建一个目录。

答案4

一行,附加(用>>别名line in .bash_profile,因此在重新启动时它随时可用。

.是告诉 bash 重新加载(来源) 配置,然后reset使这些更改在当前控制台中可用。

&&表示等待命令成功,从左到右,因此这些命令不是并行执行,而是按顺序执行。


echo 'alias macro="kontact & rekonq"' >> ~/.bash_profile && . ~/.bash_profile && reset

您可以立即输入:

macro

相关内容