我想运行一个名为tuxsay的脚本,它结合了财富和cowsay,让tux说出一些智慧的话语。我通过.bash_aliases将别名称为tuxsay并执行脚本
FORTUNE= $(fortune)
cowsay -f tux $FORTUNE
然后我有一个会生成一个新终端的脚本,我希望它输出我的第一个脚本的结果然后允许我在终端中工作,比如
xterm -e "tuxsay&"
那么我怎样才能产生一个新的终端使用cowsay然后允许我在其中工作?
细节:我有一个启动脚本,它将生成我通常使用的应用程序,我希望它生成一个运行我的tuxsay脚本然后允许我工作的终端。我在Ubuntu 12.04 LTS上运行dwm 6.0
答案 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。