我想做以下事情:
- 打开终端。
- 切换到目标脚本所在的目录。
- 打开为目标脚本提供输入的文本文件。按住/等待,直到用户保存并关闭文本文件。
- 执行目标脚本。
我编写了以下脚本来执行上述操作:
#!/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 的标准输入。您可以通过以下脚本来实现这一点(使用vim
asgedit
不适合您的需求):
#!/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:如果我误解了“在终端模拟用户”的意思,请告诉我,以便我可以相应地编辑我的答案。