別の Konsole でコマンドを実行し、ユーザーにコマンドを入力するように指示します。

別の Konsole でコマンドを実行し、ユーザーにコマンドを入力するように指示します。

私は大企業のソフトウェア分野で働いており、使用している全体的な技術に対する制御力がほとんどないため、私が持っている制約内で動作するソリューションを探す必要があります。

私がしていること:私は、ユーザーが作業しているプロジェクトに基づいて特定の環境でkonsoleを起動できるUIを開発しています。現在、ユーザーが多数のパラメータを使用してKonsoleで手動で実行できるコマンド(「setContext」と呼ばれる)があります。 setContext は多くの操作を行い、多くの環境変数を設定します。制限の一部として konsole、tcsh、および setContext コマンドを使用する必要があります。私のUIでやるべきことは、正しいパラメータを使用してsetContextコマンドを作成し、konsoleを開き、ユーザー制御後にユーザーのためにコマンドを実行することです。

私が生成するコマンドは次のとおりです。

konsole -e tcsh -c "setContext --someArgs"

この方法は機能しますが、すぐにコンソールを閉じます。--noclosekonsoleを起動するときにこのオプションを使用すると、開いているが対話型ではないままにできます。

この問題に対して一般的に受け入れられる解決策は、;bashコマンドの最後にまたはを追加することです。私の場合は。;$SHELL;tcsh

これは、次のリンクや他の多くのリンクで提案されています。

これはコンソールを開いたままにしておくため、ほとんど機能します。実際、これは何週間も問題なく使用されてきましたが、tcshすべての初期化ファイル(〜/ .cshrcなど)を再インポートして実行した後にこれがリセットされることがわかりました。setContextsetContext

これは何百人ものユーザーを対象として機能し、cshrcファイルを制御できないため、ファイルを再インポートせずにkonsoleを開いたままにする方法を見つける必要があります。試してみましたが、tcsh -f環境を保護しません。

午後を通してオンラインで検索しましたが、解決策が見つかりませんでした。環境とコマンドを理解していますが、専門家ではなく、主にPythonで作業しています。私が見つけたすべてが上記の回答の災害時であるか、cshrcファイルの修正が必要であるか、私のレベルよりはるかに高いので復号化できないので、ここに尋ねます。

よろしくお願いします。

答え1

すべての初期化ファイル(など)を再インポートして実行しますtcshsetContext~/.cshrcsetContext

環境変数を元の値にリセットしたものを含む別のディレクトリに指定し、tcshユーザーのまたはをインポートしてから。~/.cshrcHOME.cshrcHOME~/.tcshrc~/.cshrcsetContext

たとえば、/fake/homeおとり用のホームディレクトリとして使用するには、次のようにします。

konsole -e sh -c 'REAL_HOME=$HOME HOME=/fake/home exec tcsh'

含む/fake/home/.cshrc:

setenv HOME "$REAL_HOME"
if (-f ~/.tcshrc) then
   source ~/.tcshrc
else if (-f ~/.cshrc) then
   source ~/.cshrc
endif
setContext
# other aliases and initializations

はい、それはひどいパッチワークです。より良いものを探してください;-)

答え2

私と同じ状況で他の人のために共有したい可能な解決策は、qdbus別のkonsoleインスタンスを使用してコマンドを送信することです。

私の場合、Konsoleのpidを知る必要があるので、やや複雑かもしれませんが、うまくいきました。

私はuser431397のメソッドを使うことになると思います。なぜなら、qdbusはしばしばコマンドを送信すると警告を表示するからです。警告は再コンパイルして削除できますが、それは私ができることではなく、警告は私を迷惑にさせます。

私もdbusを調べて知りましたが、ここにインストールされることがわかっていますがyakuake、konsoleよりqdbusで制御する方が簡単です。

関連情報