「konsole -e」は読み取り専用端末になります

「konsole -e」は読み取り専用端末になります

プログラムで新しいターミナルを開き、対話型セッションの準備としてさまざまな環境変数を設定するカスタム スクリプトを自動的に実行しようとしています。これはすべて正常に動作しますが、結果のターミナルは編集できません (つまり、カーソルがありません)。現在の試みは次のようになります。

konsole -hold -e /path/to/bash/script/run_oenv.sh

ここではrun_oenv.sh次のようになります (簡単なテストの場合):

echo hello world
export FOO=bar

上記のコマンドを実行するとrun_oenv.sh正常に実行され、期待どおりのデバッグ ステートメントが新しいターミナルにエコー表示されますが、新しいターミナルをインタラクティブにする方法がわかりません。何が足りないのでしょうか?

最終的には、bash スクリプトは環境変数を設定する以上のことを行う必要がありますが、これは最も単純なテスト ケースです。

これは Centos 7/KDE 上です。

答え1

-eターミナルエミュレータを使用してコマンドを実行すると、そのコマンドが実行されます。その代わりシェルが起動したはずです。つまり、スクリプトが実行され、それ以外は何も行われません。

bashファイルをソースとする対話型シェルを起動する場合は、コマンドライン オプションbashを使用します。--rcfile

konsole -hold -e bash --rcfile /path/to/bash/script/run_oenv.sh

これにより、bash ないファイルを読み取ります~/.bashrc~/.bashrc対話型シェル セッションで通常行われるように、それでもソースを実行したい場合は、コードから実行しますrun_oenv.sh

[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

または短絡構文なしで、

if [ -f "$HOME/.bashrc" ]; then
    source "$HOME/.bashrc"
fi

(おそらくファイルの先頭に記述run_oenv.shして、ファイル内の変数や設定を上書きします~/.bashrc

関連情報