中間ファイルを読み書きせずにシェル間でデータを渡す方法

中間ファイルを読み書きせずにシェル間でデータを渡す方法

ユーザー入力を反映するシェルで実行されるプロセスがあるとします。それでは、他の端末からこのシェルにデータを渡すにはどうすればよいですか?中間ファイルを使用しないことは可能ですか?

たとえば、コードがあれば

fgets(string, LEN, stdin);
printf("%s", string);

それでは、他のシェルにデータを渡し、別のシェルstdinからデータを取得することは可能ですか?stdout

ベストアンサー1

しかし、どういう意味なのかよくわかりません。

単一のシェルセッション(ターミナル)内で、次のようにパイプを使用して、あるコマンドから別のコマンドにデータを渡すことができます。

$ ls -l | grep something

2つの異なるシェル間でこれを行う必要がある場合は、名前付きパイプを使用できます。

tty1$ mkfifo /tmp/mypipe
tty1$ ls -l > /tmp/mypipe
tty2$ grep something < /tmp/mypipe

mktemp名前付きパイプを配置するディレクトリを作成する方が安全です。

tty1$ dir=$(mktemp -d)
tty1$ mkfifo "$dir/mypipe"
tty1$ ls -l > "$dir/mypipe"
tty1$ rm -r "$dir"

これを行うには、パスを別のウィンドウにコピーする必要がありますが、おそらく手動です。

もちろん、名前付きパイプはパス名が必要であるという点で中間ファイルと少し似ています。しかし、データが永続ストレージに書き込まれず、ライターが遅い場合、リーダーは潜在的に早期にファイルが終了するのではなく、ライターを待つという点でパイプのように動作します。

ls -l *something*(代わりに通常を使用しますls | grepが、これは例として使用されます。)

おすすめ記事