何が起こっているのか分かりませんが、入力と出力に何が起こっているのかを理解しようとしてきました。これは私のプログラムです。
#include <stdio.h>
#include <stdlib.h>
int main(){
char pass[8];
fgets(pass, 8, stdin);
if (pass[1] == 'h'){
printf("enter shell\n");
system("/bin/bash");
printf("leave shell\n");
}
return 0;
}
以下は、いくつかの端末コマンドです。定期的に実行して「hh」と入力すると、シェルは開いたままになります。
idkanything ~ $ ./a.out
hh
enter shell
bash-3.2$
今は明らかにパイプバックを試みますが、シェルはすぐに閉じます。
idkanything ~ $ echo "hh" | ./a.out
enter shell
leave shell
今動作する時間です。
idkanything ~ $ cat <(python -c 'print "hh"') - | ./a.out
enter shell
this work
/bin/bash: line 1: this: command not found
leave shell
しかし、stdinで「-」を省略すると、シェルはすぐに閉じられるため機能しません。
idkanything ~ $ cat <(python -c 'print "hh"') | ./a.out
enter shell
leave shell
結局ここに猫を育てることになった時も効果がありました。
idkanything ~ $ (python -c 'print "hh"'; cat) | ./a.out
enter shell
this works
/bin/bash: line 1: this: command not found
leave shell
何が起こっているのかを説明できる人はいますか?シェルを開いたままにできるコマンドは何ですか?なぜシェルはこれらのコマンドに対してのみ開いており、他のコマンド(例えば「hh」を鳴らしてからパイプ接続)には開いていないのですか?
私はこれがstdoutに関連していると思います。
ベストアンサー1
「有効な」場合は、プロセスを実行状態のままにしてください。cat
読書それ標準入力が閉じていません。 (まだ)プロジェクトが終了していないため、cat
走り続けて、去るそれ標準出力はシェルで使用するために開きます(閉じていません)。