Teoretycznie, jeśli znam pid działającej powłoki bash, mogę uruchomić kota, którego stdout jest przekierowany na stdin tej powłoki. Wydaje się, że wpisuję coś na tej powłoce. Niestety, BĘDZIE strumień pochodzący od kota, ALE NIE sprawi, że powłoka będzie działać poprawnie (wprowadzone polecenie od kota nie zostanie wykonane przez bash).
Otwórz terminal:
ps -ef | grep bash
ymf 4906 4887 0 16:19 pts/0 00:00:00 /bin/bash
Na innym terminalu:
cat 1> /proc/4906/fd/0
echo 'hello!'
Dlaczego?
top
a zobaczysz, że stdin po prostu dodaje gdzieś do wyniku. Domyślam się, że ponieważ powłoka jest uruchamiana jako powłoka interaktywna, nie przyjmuje poleceń ze standardowego wejścia. Ale to czysta spekulacja.
ls -l /proc/PID/fd/
. 0, 1, 2 są przekierowywane na /dev/pts/TERM_NUMER
Nieważne, czy akceptuje polecenia ze standardowego wejścia, jestem pewien, że fd0 służy do wprowadzania danych i już przekierowałem do niego wyjście cat.