试图创建一个打开 gnome-terminal 的 bash 脚本,然后运行 ls 来显示目录的内容,但它只是打开了 gnome-terminal。我将创建一些其他也使用多个命令的脚本。
我的脚本:
#!/bin/bash 侏儒终端 ls -a /示例文件夹
编辑:
澄清我正在努力实现的目标。我正在尝试创建一个脚本,该脚本将打开 gnome-terminal,列出 /examplefolder 的内容,然后为常规终端使用做好准备。这是可能的,还是我叫错了树?
对于一个接一个执行而不等待上一个完成的命令:
#!/bin/bash ls -a /examplefolder & 叶垫 & ls -a /home & 执行重击
对于一个接一个执行的命令,先等待上一个完成:
#!/bin/bash ls -a /示例文件夹 叶垫 ls -a /home 执行重击
正如 MB_CE 的回答所建议的那样,可以使用“exec bash”作为最终命令来保持终端打开,因为从技术上讲,bash 仍在运行。
小智 7
(对于 Ubuntu 12.04)这里的问题是你的脚本 bash 将打开一个 gnome-terminal,然后在你当前的终端而不是新打开的终端中执行命令(如果这就是你真正想要做的。)
注意:正如@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 进程在运行。
您可以参考此答案以获取进一步的解决方法。
在 bash 脚本中,命令是一个接一个地运行的。您的脚本启动gnome-terminal
,等待其终止然后运行ls -a /examplefolder
。要通过gnome-terminal运行命令,请使用以下-x
参数:
gnome-terminal -x bash -c 'ls -a /examplefolder; read -p "Press [ENTER] to continue..."'
Run Code Online (Sandbox Code Playgroud)
这将bash
在新打开的终端中启动,并使其运行ls
和read
命令。
顺便问一下,您有什么具体原因需要从 shell 脚本启动终端吗?(通常是相反的方式。)如果您只想从桌面启动 shell 脚本并在终端中查看它的结果,您只需为该脚本创建一个启动器并选择“在终端中运行”,至少在 Xubuntu 中是这样,但我很确定其他口味也有类似的选择。