Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在新终端中打印cowsay_Bash_Shell_Terminal_Spawn - Fatal编程技术网

Bash 在新终端中打印cowsay

Bash 在新终端中打印cowsay,bash,shell,terminal,spawn,Bash,Shell,Terminal,Spawn,我想运行一个名为tuxsay的脚本,它结合了fortune和cowsay,让tux说一些智慧的话。我在by.bash_别名中创建了一个别名,称之为tuxsay并执行脚本 FORTUNE= $(fortune) cowsay -f tux $FORTUNE 然后,我有一个脚本,它将生成一个新的终端,我希望它输出我的第一个脚本的结果,然后允许我在终端中工作,类似于 xterm-e“tuxsay&” 那么,我如何使用cowsay生成一个新的终端,然后允许我在其中工作呢 具体说明:我有一个启动脚本,它

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

FORTUNE= $(fortune)
cowsay -f tux $FORTUNE
然后,我有一个脚本,它将生成一个新的终端,我希望它输出我的第一个脚本的结果,然后允许我在终端中工作,类似于

xterm-e“tuxsay&”

那么,我如何使用cowsay生成一个新的终端,然后允许我在其中工作呢


具体说明:我有一个启动脚本,它将生成我通常使用的应用程序,我希望它生成一个终端,运行我的tuxsay脚本,然后允许我工作。我在Ubuntu 12.04 LTS上运行dwm 6.0,为什么不把你的命令添加到你的
.bashrc
文件中呢?然后,它将在每次启动新的交互式shell时运行。您可以测试
$TERM
变量是否包含“xterm”,并使输出以该变量为条件。e、 g.在
.bashrc
的末尾添加以下行:

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

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

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

  • 如果从bash执行,
    &
    字符将把tuxsay命令(别名)放在后台,但这在这里并没有真正的帮助。您需要的是在tuxsay完成后启动一个新的shell

  • 小心使用
    .bash\u别名
    。我在基于Redhat的系统上注意到,放置在该文件中的别名不起作用,因为
    .bash\u alias
    文件没有来源。()所以它看起来像是
    。bash_别名
    默认来源于基于Ubuntu的系统,但对其他系统没有任何保证

考虑到上述情况,如果您确实希望tuxsay在每个xterm的基础上运行–即,您希望在xterm命令行上指定它–您可以执行以下一行操作:

xterm -e 'cowsay -f tux $(fortune); bash'
这将传递复合命令
cowsay-f tux$(fortune);bash
到xterm。这个复合命令由两个命令组成:首先执行
cowsay
操作,然后启动bash


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

尝试现有命令时会发生什么?我也不认为有理由使用
&
,因为我假设
tuxsay
只会打印您的消息并返回。
xterm-e
不会生成任何东西,但是如果它只有一个命令,它会生成一个新的xterm。变量赋值中等号两边都不允许有空格:
FORTUNE=$(FORTUNE)
,但仍然无法生成终端