web-dev-qa-db-ja.com

スクリプトから新しいkonsoleを開き、コマンドを実行して、結論としてインタラクティブになります

konsoleターミナルを開くためのスクリプト(起動時に実行)を取得できるようにしたい。
それが開いたとき、それはいくつかの永続的なこと(ディレクトリやソースbashrcの変更など)を実行し、長時間実行されているプログラムを実行することです。
プログラムがクラッシュしたり、入って<ctrl+c>それは、標準入力からのコマンドの受け入れを開始することです(「up-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に関するものなので、ジューシーなティックを与えることはできないと思います)

3
Hashbrown

@ n.stのコメントのおかげで、私はこれを1つのライナーにしました。

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

これは、tmpfilesのない短いバージョンであり、以下の代わりにbashプロセス置換を使用します。

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をコピーするだけです追加コマンドを最後にコピーします

4
Hashbrown