如何使用 shell 脚本在终端模拟用户顺序执行命令

如何使用 shell 脚本在终端模拟用户顺序执行命令

我想做以下事情:

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

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

#!/bin/bash 
echo "hello"
gnome-terminal -x bash -c "cd ~/Scripts;pwd;gedit input.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已经得到满足(不是第三个)。gedit在保存并关闭窗口之前,我无法按住该窗口。

我想知道的是-当我没有通过在语句末尾gedit写入来指示任何此类事情时,为什么该命令被视为后台进程?&如何确保我的gedit进程作为前台进程运行并需要用户控制?

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

答案1

正如评论中提到的,gedit 和可能的其他图形编辑器可能无法完全按预期运行,因为它是异步运行的。

另外,这个问题给人的印象是,你想使用该文件作为 python 脚本的输入(“stdin”),但我不是 100% 有信心。在这种情况下,正如命令中提到的,您可能需要使用expect它,具体取决于您的需求的复杂程度。expect提供动态生成输入的方法,而输入文件将是静态的。无论如何,假设您想要静态输入并且我对问题的理解是正确的,我会回答。

为此,您需要通过管道将文件的内容发送到 python 的标准输入。您可以通过以下脚本来实现这一点(使用vimasgedit不适合您的需求):

#!/bin/bash 
echo "hello"
gnome-terminal -x bash -c "cd ~/Scripts; pwd; vim input.txt; cat input.txt | python test.py; exec $SHELL"
echo "good bye"

PS:如果我误解了“在终端模拟用户”的意思,请告诉我,以便我可以相应地编辑我的答案。

相关内容