#!/usr/bin/env python3 """ [deadeye@nexus ~]$ python3 out.py \ <(echo "Hello World") \ <(echo "Enter the Matrix") \ <(echo "Oh, it's an countdown starting at 63") \ <(echo "Another argument") Printing content from 1. argument: /dev/fd/63 Hello World Printing content from 2. argument: /dev/fd/62 Enter the Matrix Printing content from 3. argument: /dev/fd/61 Oh, it's an countdown starting at 63 Printing content from 4. argument: /dev/fd/60 Another argument """ import sys arguments = sys.argv[1:] message = rf""" python3 {sys.argv[0]} \ <(echo "Hello World") \ <(echo "Enter the Matrix") \ <(echo "Oh, it's an countdown starting at 63") \ <(echo "Another argument") """.lstrip() if not arguments: raise SystemExit(message) for number, file in enumerate(sys.argv[1:], start=1): print(f"Printing content from {number}. argument: {file}") if not file.startswith("/dev/fd/"): print(f"Argument {number} is not a PIPE: {file}") continue with open(file) as fd: try: while chunk := fd.read(1024): print(chunk, end="") except UnicodeDecodeError: print( f"Could not decode file '{file}' from argument {number}. UTF8 encoding is expected. Don't cat binary files" ) break print()