Есть ли способ создать скрипт python, который обертывает всю команду bash, включая трубы.bash wrap the piped command с скриптом python
Например, если у меня есть следующий простой скрипт
import sys
print sys.argv
и называть это как так (от Баш или IPython), я получаю ожидаемый результат:
[[email protected] trell]$ python test.py ls
['test.py', 'ls']
Если добавить трубы, однако, вывод сценария перенаправляется к раковине трубы:
[[email protected] trell]$ python test.py ls > out.txt
И > out.txt
часть не находится в sys.argv. Я понимаю, что оболочка автоматически обрабатывает этот вывод, но мне любопытно, есть ли способ заставить оболочку игнорировать его и передать его процессу, вызываемому.
Дело в том, чтобы создать нечто вроде оболочки для оболочки. Я хотел бы регулярно запускать команды, но отслеживать вывод strace для каждой команды (включая трубы). В идеале я хотел бы сохранить все функции bash, такие как табуляция, стрелки вверх и вниз и поиск по истории, а затем просто передать завершенную команду через скрипт python, который вызывает подпроцесс для его обработки.
Возможно ли это, или мне придется написать свою собственную оболочку, чтобы сделать это?
Редактировать
Оказывается, я спрашиваю, точно такую же вещь, как this question.
Замечание по терминологии: это не труба, это перенаправление вывода. – chepner
Вы правы. Извини за это. Тем не менее, точка все же действует. Проблема остается прежней, если она не была перенаправлением, а вместо нее. –