2013-10-14 104 views
1

我想運行一個名爲tuxsay的腳本,它結合了財富和cowsay,讓tux說出了一些智慧的詞彙。我在做一個別名.bash_aliases調用它tuxsay和執行腳本在新的終端打印一個cowsay

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

然後我有一個腳本,將產生一個新的終端,我希望它輸出我的第一個劇本的結果的話讓我的工作在終端上,像

xterm -e "tuxsay&"

所以,我怎麼能生成一個新的終端使用cowsay然後讓我在工作?

細節:我有一個啓動腳本,它會生成我通常使用的應用程序,並且我希望它生成一個運行我的tuxsay腳本的終端,然後允許我工作。我在Ubuntu 12.04 LTS上運行dwm 6.0

+0

當你嘗試你有什麼會發生什麼?我也沒有看到使用'&'的理由,因爲我認爲'tuxsay'只會打印您的消息並返回。 –

+0

'xterm -e '不生成任何東西,但是如果它只有一個命令,它會產生一個新的xterm。 –

+0

變量賦值中的等號兩邊不允許有空格:'FORTUNE = $(fortune)''。 – chepner

回答

2

爲什麼不把你的命令加到你的.bashrc文件中?然後每當新的交互式shell啓動時就會運行它。您可以測試$TERM變量是否包含「xterm」,並使輸出成爲有條件的。例如以下行添加到.bashrc末:

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

更新

雖然我覺得上面仍然可能是最有用的普遍的答案,我注意到一些事情:

  • tuxsay是一個bash別名。 bash別名只能在bash本身中理解,但是當你將一個命令傳遞給xterm -e時,該命令由xterm直接執行,而沒有任何bash參與。系統將無法找到並執行名爲「tuxsay」的文件並且會失敗。

  • 如果從bash執行,&字符會將tuxsay命令(別名)放在後臺,但這在這裏並沒有什麼幫助。你需要一個新的外殼來啓動一旦tuxsay完成。請注意0​​。我注意到在我的基於Redhat的系統上放置在這個文件中的別名不起作用,因爲.bash_aliases文件沒有被採用。(My Bash aliases don't work)因此,看起來.bash_aliases默認從基於Ubuntu的系統獲得,但是對其他人沒有保證。

根據以上考慮,如果你一定要tuxsay到即要xterm命令行–你可以做以下的一行中指定這對每個xterm的基礎–運行:

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

這將化合物命令cowsay -f tux $(fortune); bash傳遞給xterm。這個複合命令由兩個命令組成:首先執行cowsay的事情,然後啓動bash。

您也可以將這兩個命令放在一個shell腳本中,並將shell腳本傳遞給xterm。