追加読書

追加読書

udiskie自動マウントスクリプトを使用しています。私が望むのは、外付けドライブを接続すると、インストールフォルダの場所に新しいrxvt端末が開くことです。

すべてがうまく機能しますが、唯一の問題は、rxvt-terminalを起動して-cdディレクトリに変更することを選択した場合、別のディレクトリにCDを移動した後でもドライブをマウント解除できないことです。マウントディレクトリにCDを挿入せずに手動でターミナルを起動すると、目的の別のディレクトリに-cd変更してマウントを解除できます。だから私の考えはlaunch rxvtを使用し-hold-eそのオプションでコマンドを実行することを選択することですcd

ただし、動作できません。 rxvt は引き続き「子プロセスを実行できません」というメッセージを表示します。私のスクリプトでは、私は似たようなことをすべて試しましたrxvt-unicode -hold -e "/bin/bash -c cd $@"(スクリプトは動作する引数としてudiskieからインストールパスを取得しました)、私が考えることができるすべての組み合わせに引用符を使用しました。それでもrxvt-unicode -hold -e "/bin/bash -c cd /etc"失敗するので何か間違っていると思います。

答え1

すべてが正常です

代わりに、あなたの方法のどれも動作しません。 ☺

-cd子プロセスをフォークする前に、擬似ターミナルマスターurxvtのターミナルエミュレータになる親プロセスのディレクトリを変更できます。アンインストール時に問題が発生するのは、端末エミュレータプロセスがこのディレクトリを作業ディレクトリとして保持するためです。

(これはUnicode rvxtのクライアント - サーバーバージョンで表示される問題ではありませんurxvtc。)

-c既存のUnixシェルには、オプションでコマンドを実行してから標準入力から読み取るインタラクティブモードに入るモードはありません。これは、Microsoft / IBMの場合はcmdオプションではありません/k。 ☺ あなたは得ます誰でも標準入力で実行され、コマンドは不要です。またはコマンドを実行しますが、両方で実行するわけではありません。

cdまるで組み込みのシェルでないかのように試して実行できるメソッドに無意識に近づいているのです。 (サブプロセスを実行できないときに発生する問題は、実行したいプログラムの名前が単一の文字列であることです。/bin/bash -c cd /etcこれは、システム上のプログラムの画像ファイル名がほとんどわからないことです。)

実際にははい実際の作業は、作業ディレクトリを変更してから別のプログラム(この場合は対話型シェル)にロードするために接続するだけのスタンドアロンバイナリです。私のnoshツールキットとLaurent Bercotのexeclineツールキットにあるツールの名前はchdircd。 Wayne Marshallのツール名はruntool

  • urxvt -e chdir "$@" "$SHELL"
  • urxvt -e cd "$@" "$SHELL"
  • urxvt -e runtool -c "$@" "$SHELL"

ENV要件を完全に満たしていない別の残りのアプローチは、環境変数を使用することです。残念ながら、これを利用するにはPOSIX互換モードの対話型シェルが必要です。これは、必要な対話型シェルではない可能性が高く、必要なすべての作成、セキュリティ、およびクリーンアップのヒントを含む一時スクリプトファイルです。

追加読書

  • ジョナサンデボインポラード(2016)。chdirスナックガイド。ソフトウェア。
  • cd。ローランベルコ。 実装する。 skarnet.org.
  • ウェイン・マーシャル(2013)。runtool。囚人のハンドブック。 §8。
  • https://unix.stackexchange.com/a/250708/5132

関連情報