【问题标题】:Execute multiple commands sequentially in terminal using shell script使用shell脚本在终端中顺序执行多个命令
【发布时间】:2017-09-01 00:13:37
【问题描述】:

我想做以下事情:

  1. 打开一个终端。
  2. 切换到目标脚本所在的目录。
  3. 打开为目标脚本提供输入的文本文件。保持/等待,直到用户保存并关闭文本文件。
  4. 执行目标脚本。

我编写了以下脚本来执行上述操作:

#!/bin/bash 
echo "hello"
gnome-terminal -x bash -c "cd ~/automation/DVF99_Automation/Scripts;pwd;gedit sample.txt;python test.py;exec $SHELL"
echo "good bye"

上面给了我以下输出:

user4@user-pc-4:~/Desktop$ ./DAT_run.sh
hello
good bye

在打开的新 gnome 终端上,我看到以下消息:

/home/user4/Scripts
From python script
From python script
From python script
From python script
From python script

以上意味着它已经执行了python代码并且我的要求1,2和4已经满足(不是第3个)。我无法将gedit 窗口作为前台进程,直到它被保存并关闭(因此只有在我关闭在gedit 中打开的文件后才会执行下一条语句)。

这里可能出了什么问题?我是 shell 脚本的新手,我觉得我很可能在这里遗漏了一些东西。我怎样才能达到上述所有要求?

【问题讨论】:

  • 会不会是正在执行的gedit是一个后台启动gedit的shell脚本?
  • 不。 sample.txt 只是一个纯文本文件。
  • 我没有提到sample.txt。我参考了gedit。您可以在调用 gedit 之前添加两个命令 type gedit; file $(type -p gedit)

标签: linux bash shell scripting gnome-terminal


【解决方案1】:

顺便说一句,您需要在后台启动 gedit。

例子:

$ gedit sample.txt&;python test.py;exec $SHELL"

更好的是变量替换。

 #!/she/bang
 FILE=sample.txt
 gedit $(FILE)&;python test.py;exec $SHELL"

【讨论】:

  • 我希望gedit 作为前台进程运行,其余语句仅在我(保存并)关闭gedit 窗口后执行。为错过这一点而道歉。已使用此详细信息更新了帖子。
  • 如果您只想创建文件,则可以使用 touch.txt。您可以将脚本中的整个命令复制粘贴到终端上,然后查看那里发生了什么。
  • 我不只是想创建一个文件。我提示用户在其中输入/更新一个值并保存它,以便我的 python 程序可以读取更新的文件并执行操作。
  • 在这种情况下,您的脚本作为 cron 作业运行,在某些情况下它会提示 gedit 要求用户输入日志?在这种情况下,您必须等到 gedit 关闭。为此,您可以使用陷阱信号来识别,一旦 gedit 关闭,您就可以执行其他命令
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2017-01-15
  • 2011-04-13
  • 2018-09-18
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多