1

我想运行一个名为 tuxsay 的脚本,它结合了 fortune 和 cowsay 来让 tux 说出一些智慧的话。我在 .bash_aliases 中创建了一个别名,称它为 tuxsay 并执行脚本

FORTUNE= $(fortune)
cowsay -f tux $FORTUNE

然后我有一个脚本将生成一个新终端,我希望它输出我的第一个脚本的结果,然后允许我在终端中工作,比如

xterm -e "tuxsay&"

那么我怎样才能使用 cowsay 生成一个新的终端然后让我在其中工作呢?

细节:我有一个启动脚本,它将生成我通常使用的应用程序,并且我希望它生成一个运行我的 tuxsay 脚本然后允许我工作的终端。我在 Ubuntu 12.04 LTS 上运行 dwm 6.0

4

1 回答 1

2

为什么不直接将命令添加到.bashrc文件中?然后它将在每次启动新的交互式 shell 时运行。您可以测试$TERM变量是否包含“xterm”,并以此为条件输出。例如将以下行添加到末尾.bashrc

[[ "$TERM" =~ xterm ]] && tuxsay

更新

虽然我认为以上可能仍然是最有用的一般答案,但我注意到了更多的事情:

  • tuxsay是一个 bash 别名。bash 别名只能在 bash 本身中理解,但是当您将命令传递给 时xterm -e,该命令将由 xterm 直接执行,而无需任何 bash 参与。系统将无法找到并执行名为“tuxsay”的文件并且会失败。

  • 如果从 bash 执行,&角色会将 tuxsay 命令(别名)置于后台,但这在这里并没有真正的帮助。tuxsay 完成后,您需要一个新的 shell 来启动。

  • 小心.bash_aliases。我注意到在我的基于 Redhat 的系统上放置在此文件中的别名不起作用,因为.bash_aliases文件不是来源。(我的 Bash 别名不起作用)所以它看起来.bash_aliases默认来自基于 Ubuntu 的系统,但没有对他人的保证。

考虑到上述情况,如果您绝对希望 tuxsay 在每个 xterm 的基础上运行 - 即您想在 xterm 命令行上指定它 - 您可以执行以下单行:

xterm -e 'cowsay -f tux $(fortune); bash'

这会将复合命令传递cowsay -f tux $(fortune); bash给 xterm。这个复合命令由两个命令组成:首先做事cowsay,然后启动 bash。

您也可以将这两个命令放在一个 shell 脚本中,并将 shell-script 传递给 xterm。

于 2013-10-14T18:47:32.350 回答