Verwenden Sie die -p
Option, test
wenn eine Datei eine Pipe ist:
#!/bin/bash file="$1" if [ -p "$file" ] then echo "$file is a pipe" fi
Demo:
$ myscript.sh <(echo hello) /dev/fd/63 is a pipe
Ich schreibe eine C ++ - Anwendung und muss mit der Prozessersetzung in der Bash-Shell arbeiten.
Ich versuche, einen Weg zu finden, um die Pfade zu überprüfen, die als Argumente an mein Programm übergeben werden. Einige davon zeigen auf FIFO-Dateien, die durch Prozessersetzung erstellt wurden.
Gibt es eine Shell- (oder C ++) - Methode, mit der überprüft werden kann, ob das System diese Dateien erstellt /dev/fd
oder woanders erstellt?
Verwenden Sie die -p
Option, test
wenn eine Datei eine Pipe ist:
#!/bin/bash file="$1" if [ -p "$file" ] then echo "$file is a pipe" fi
Demo:
$ myscript.sh <(echo hello) /dev/fd/63 is a pipe
Die kurze Antwort ist, dass Sie dies nicht tun können. Nur weil in einem Verzeichnis bash standardmäßig FIFO-Pfade verwendet, bedeutet dies nicht, dass ein bestimmtes FIFO in diesem Verzeichnis von bash erstellt wurde oder dass es von bash als Argument an Ihren Befehl übergeben wurde.
Schauen Sie sich das Gesamtbild Ihres Problems an. Was versuchst du wirklich zu lösen?
Wenn Sie versuchen zu lösen, dass "die Ausgabe meines Programms immer in ein anderes Programm geleitet werden muss", dann müssen Sie den Benutzer nicht dazu veranlassen, die obskure Prozessersetzung von bash zu verwenden. Was ist, wenn die Standardshell auf ihrem System zsh ist? Bourne-Schale? Kornschale?
Lassen Sie Ihr Programm stattdessen eine Pipe, Gabel und das andere Programm ausführen.
Also, was versuchst du wirklich zu tun? Was passiert, wenn Sie, Gott verbieten, Ihre Ausgabe in eine Datei schreiben, die der Benutzer Ihres Programms übergeben hat, und nicht in eine von bash erstellte FIFO?