シェルスクリプトを使用して端末でコマンドのユーザー順次実行をシミュレートする方法

シェルスクリプトを使用して端末でコマンドのユーザー順次実行をシミュレートする方法

私は次のことをしたいと思います:

  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が満たされていることです(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:「ターミナルでユーザー偽装」が何を意味するのか誤解した場合は、それに応じて回答を編集できるようにしてください。

おすすめ記事