尝试创建一个 bash 脚本,打开 gnome-terminal,然后运行 ls 来显示目录的内容,但它只打开 gnome-terminal。我将创建一些也使用多个命令的其他脚本。
我的脚本:
/bin/bash #!/bin/bash gnome 终端 ls -a /示例文件夹
编辑:
为了澄清我想要实现的目标。我试图创建一个脚本,该脚本将打开 gnome-terminal,列出 /examplefolder 的内容,然后准备进行常规终端使用。这可能吗,还是我选错了方向?
答案1
对于不等待前一个命令完成而逐个执行的命令:
/bin/bash #!/bin/bash ls -a /示例文件夹 & 叶垫 & ls -a /home& 执行 bash
对于要依次执行的命令,请等待前一个命令先完成:
/bin/bash #!/bin/bash ls -a /示例文件夹 叶垫 ls -a /home 执行 bash
正如 MB_CE 的回答所建议的,使用“exec bash”作为最终命令可用于保持终端打开,因为从技术上讲 bash 仍在运行。
答案2
(对于 Ubuntu 12.04)这里的问题是,使用你的脚本,bash 将打开一个 gnome 终端,然后在你当前终端而不是新打开的终端中执行该命令(如果这是你实际尝试做的。)
注意:同样如 @unorthodox 所建议的,语法&
应该用在您不想等待的命令末尾(允许它们在后台运行)。然而,有趣的是,至少在 Ubuntu 12.04 中这不是问题。但在其他 Ubuntu 版本中,这可能是一个问题。
您可以使用以下命令在新打开的gnome-terminal中执行命令:
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 进程。
您可以参考这个回答以寻求进一步的解决方法。
答案3
在 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 中是这样,但我很确定其他版本也有类似的选项。
答案4
在终端中显示输出
gnome-terminal -x bash -c "echo foo; echo bar; read || sleep 9999"
或者在 GUI 窗口中
( echo foo; sleep 5; echo bar ) | zenity --text-info