在新终端中打印cowsay

时间:2013-10-14 17:25:33

标签: bash shell terminal spawn

我想运行一个名为tuxsay的脚本,它结合了财富和cowsay,让tux说出一些智慧的话语。我通过.bash_aliases将别名称为tuxsay并执行脚本

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

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

xterm -e "tuxsay&"

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

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

1 个答案:

答案 0 :(得分:2)

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

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

<强>更新

虽然我认为上述内容仍然是最有用的一般答案,但我还注意到了一些其他内容:

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

  • 如果从bash执行,&字符会将tuxsay命令(别名)放在后台,但这对此没有帮助。你需要的是一个新的shell,一旦完成tuxsay就会启动。

  • 小心.bash_aliases。我注意到在我的基于Redhat的系统上放置在此文件中的别名无效,因为.bash_aliases文件未来源。(My Bash aliases don't work)所以看起来.bash_aliases默认来源来自基于Ubuntu的系统,但不保证其他系统。

考虑到上述情况,如果你肯定希望tuxsay在每个xterm的基础上运行 - 也就是说你想在xterm命令行上指定它 - 你可以做以下一行:

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

这会将 compound 命令cowsay -f tux $(fortune); bash传递给xterm。此复合命令包含两个命令:首先执行cowsay事务,然后启动bash。

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