ファイル記述子を介して対話型プロセスに入力を送信する

ファイル記述子を介して対話型プロセスに入力を送信する

プロセスが入力を読み取るファイル記述子を見つけるにはどうすればよいでしょうか?

背景

私はヴィテAlpine コンテナで開発する場合、Vite (ヴィートと発音) サーバーを再起動する必要があります。現在、コンテナにログインし、コマンドを使用して手動で Vite を起動するとvite --host '0.0.0.0' --port 3000、コンソールが引き継がれ、対話型入力が可能になります。そのため、ファイルの変更がコンテナ内の Docker ボリューム バインド マウントに登録されない場合にサーバーを再起動するなどの操作を実行できます (Windows はばかげています)。

問題

コンテナの起動時にこのコマンドを実行したいと思います。そうすると、Docker がコマンドを渡さないため、コマンドを送信する機能が失われます。

Vite サーバーを実行するコンテナ

次に、 を実行するスクリプトを作成しpnpm run dev &、Vite サーバーのプロセス ID を取得し、 を使用してそのファイル記述子に入力を送信できると考えましたecho "h" > /proc/17/fd/0が、何も起こりません。PID 33 も試しました。入力を間違った場所に送信していると思いました。しかし、正しいファイル記述子 (存在する場合) を見つけるにはどうすればよいですか。

コンテナ内のPS出力

PID   USER     TIME  COMMAND
    1 root      0:00 node /usr/local/bin/pnpm run dev
   17 root      0:00 node /root/task-01/node_modules/.bin/../vite/bin/vite.js --host 0.0.0.0 --port 3000
   33 root      0:00 /root/task-01/node_modules/.pnpm/@[email protected]/node_modules/@esbuild/linux-x64/bin/esbuild --service=0.20.
   39 root      0:00 sh
   47 root      0:00 ps

免責事項: ファイルが変更されたときにサーバーを手動で再起動する必要がなくなったため、この問題は Docker watch で解決されるはずです。ただし、これは他のケースでも役立つ可能性があるため、可能かどうかを確認したいと思います。また、root として実行していることを非難しないでください。通常はそうしません。

関連情報