私は次のことをしたいと思います:
- 端末を開きます。
- ターゲットスクリプトがあるディレクトリに移動します。
- ターゲットスクリプトへの入力を提供するテキストファイルを開きます。ユーザーがテキストファイルを保存して閉じるのを待つか待ちます。
- ターゲットスクリプトを実行します。
上記のタスクを実行するために、次のスクリプトを作成しました。
#!/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が満たされていることです(3番目の要件ではありません)。gedit
保存して閉じるまでウィンドウを押し続けることはできません。
私が知りたいことは- ステートメントの最後に書き込んでそのような内容を示さないのに、gedit
コマンドがバックグラウンドプロセスと見なされるのはなぜですか?私のプロセスがフォアグラウンドプロセスとして実行され、ユーザーコントロールが必要かどうかを&
確認できますか?gedit
ここで何が間違っている可能性がありますか?私はシェルスクリプトに初めて触れて、ここに何か抜けたような気がしました。上記のすべての要件をどのように満たすことができますか?
ベストアンサー1
コメントで述べたように、geditや他のグラフィックエディタは非同期で実行されるため、期待どおりに正しく実行されない可能性があります。
また、この質問はファイルをPythonスクリプトへの入力( "stdin")として使用する印象を与えますが、100%確信できません。この場合、コマンドで説明されているように、expect
要件の複雑さに応じて使用する必要があります。expect
入力ファイルは静的ですが、入力を動的に生成する方法を提供します。とにかく、あなたは静的入力をしたいと思い、私の質問の理解が正しいと仮定して答えます。
これを行うには、ファイルの内容をPythonの標準入力にパイプする必要があります。次のスクリプトを使用してこれを達成できます(必要に応じないvim
使用)。gedit
#!/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:「ターミナルでユーザー偽装」が何を意味するのか誤解した場合は、それに応じて回答を編集できるようにしてください。