使用多个命令创建一个简单的Bash脚本

尝试创建一个bash脚本,打开gnome-terminal,然后运行ls命令来显示目录内容,但只是打开了gnome-terminal而已。我还将创建一些其他使用多个命令的脚本。
我的脚本:
#!/bin/bash gnome-terminal ls -a /examplefolder 编辑:
为了澄清我的目标,我想创建一个脚本,它将打开gnome-terminal,列出/examplefolder的内容,然后准备好进行常规终端操作。这是否可行,或者我走错了路?
4个回答

要让命令按顺序执行,而不等待前一个命令完成:

#!/bin/bash
ls -a /examplefolder &
leafpad &
ls -a /home &
exec bash

要让命令按顺序执行,并等待前一个命令完成:

#!/bin/bash
ls -a /examplefolder
leafpad
ls -a /home
exec bash

如MB_CE的答案所建议的,使用"exec bash"作为最后一个命令可以保持终端打开,因为从技术上讲bash仍在运行。


(对于Ubuntu 12.04)问题在于使用您的bash脚本将打开一个gnome终端,然后在当前终端中执行命令,而不是在新打开的终端中执行(如果这正是您想要做的)。注意:还建议如@unorthodox所建议的那样,在要等待的命令末尾使用“&”(允许它们在后台运行)。但有趣的是,至少在Ubuntu 12.04中,这不是问题。但是,在其他Ubuntu版本中可能会出现这个问题。您可以使用以下命令在新打开的gnome终端中执行命令:gnome-terminal -e“ ls -a /examplefolder”gnome-terminal --command "ls -a /examplefolder"
然而,一旦命令执行完毕,这将关闭终端,并且如果您想要查看这些命令的结果,您将无法做到。请注意,gnome-terminal并不是为了这种情况而设计的(从脚本中在新打开的gnome-terminal中查看结果)。在这个很好的答案中定义了一个解决方法:

让gnome-terminal运行bash,并告诉bash运行您的命令,然后再运行bash

gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

或者

gnome-terminal -x bash -c "echo foo; echo bar; bash"

最后的exec bash是必需的,因为bash -c会在命令执行完毕后终止。exec会导致正在运行的进程被新进程替换,否则您将有两个bash进程在运行。

您可以参考这个答案以获取更多解决方法。


1或者 gnome-terminal -x bash -c“echo foo; echo bar; bash” - TuKsn

在bash脚本中,命令一个接一个地运行。您的脚本启动gnome-terminal,等待它终止后再运行"ls -a /examplefolder"命令。要通过gnome-terminal运行命令,请使用"-x"参数:
gnome-terminal -x bash -c 'ls -a /examplefolder; read -p "Press [ENTER] to continue..."'

这将在新打开的终端中启动bash,并使其运行ls和read命令。
顺便问一下,您有任何特定的原因要从shell脚本启动终端吗?(通常是反过来的。)如果您只想从桌面启动一个shell脚本并在终端中查看结果,您可以创建一个启动器并选择“在终端中运行”,至少在Xubuntu中是这样的,但我相信其他版本也有类似的选项。

这个应该可以运行,但如果你解释一下为什么原帖的代码不起作用,以及为什么这个代码可以更好。 - Oli
1@kraxor 有没有办法在运行脚本后保持终端打开?我像使用快捷方式一样使用这个脚本,它会打开一个终端,运行这个命令,然后准备好使用。除非别无选择,否则我不想使用.desktop文件。 - please delete me

在终端中显示输出
gnome-terminal -x  bash -c "echo foo; echo  bar; read || sleep 9999"  

或者在图形用户界面窗口中。
 ( echo foo;  sleep 5; echo  bar ) | zenity --text-info