スクリプトから新しいコンソールを開き、コマンドを実行して終了時に対話型になる

スクリプトから新しいコンソールを開き、コマンドを実行して終了時に対話型になる

スクリプト (起動時に実行) でターミナルを開くことができるようにしたいですkonsole。ターミナル
が開くと、いくつかの永続的な処理 (ディレクトリの変更や bashrc のソースなど) が行われ、長時間実行されるプログラムが実行されます。
プログラムがクラッシュしたり、プログラムが起動したりすると<ctrl+c>、標準入力からコマンドの受け入れが開始されます (最初からずっと対話型だったかのように、再試行するには「上向きの Enter」キーを押します)。

これを動作させるために、さまざまなことを試しました (現在は、これを動作させてls、完了時にインタラクティブに戻すようにしています)。

konsole -e ls
konsole --hold ls
konsole -e /bin/bash -c ls
konsole --hold -e "/bin/bash -c ls"
konsole -e "/bin/bash -i -c ls"
konsole -e /bin/bash -i -c ls
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

echo ls > /tmp/konsolebash
konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"

それは引用符と関係があるのでしょうか? 引用符を使用しないほうがよいのでしょうか、
それとも何かをエスケープするべきなのでしょうか? そもそも実行してみる必要があるのでしょうかbash?
アイデアが尽きてきましたが、実現可能であることを願っています (ただし、私が見逃した恥ずかしいほど単純なものではないことを願っています)。

konsole特に問題がある場合は、他の端末エミュレーターをうまく使用できる回答に賛成します(ただし、質問が具体的にそれに関するものなのでkonsole、興味深い回答を付けることはできないと思います)

答え1

@n.st のコメントのおかげで、このワンライナーを作成しました:

konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")

これは、次の bash プロセス置換を使用した、tmpfiles なしの短縮バージョンです。

echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

これは、いくつかのコマンドを実行し、それらを表示し、環境を変更し、長時間実行されるプログラム ( less) を実行し、終了すると ( :q) 対話型になります。したがって、 (デモンストレーション) をスクリプトに
置き換えてください。cd /;ls;echo hi | less

履歴はありませんが、少なくとも正しいディレクトリに移動しており、必要な環境変数が設定されています。


基本的には以前の試みと同じです。

konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

ただし、ファイルの書き込みはkonsole実行外であり、フラグを削除し-i、実行パラメータは1つの引用ブロック内にありません。


残念ながら、--rcfileスイッチ~/.bashrcによりこれらのコマンドがロードされなくなるため、エイリアスなどが必要な場合はこれを実行する必要があります。

cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

これは単にbashrcをコピーするだけです追加するあなたの命令は最後まで

答え2

より短くてシンプルな解決策:

konsole -e '$SHELL -c "ls; $SHELL"' &

これも履歴やソースに関する問題はあり.bashrcません。$SHELL環境変数が bash を指していない場合は、手動で指定できます。

これにより、同じターミナル ウィンドウ内に 2 番目の (bash) シェルが生成されるため、最初のコマンドの一部が引き継がれない可能性があります。

回答はaskubuntuから引用しました答え

関連情報