Потому что grep
не знает, как обращаться с |
. Приготовься к неприятному побегу:
statement = """sh -c 'grep thing file | grep thing2 | tail -1'"""
Это создает оболочку на другой стороне и просит ее интерпретировать строку grep thing file | grep thing2 | tail -1
. Одинарные кавычки необходимы, поскольку sh -c
принимает только один аргумент.
Таким образом, оболочка создаст канал для вас, выполняя все команды. И вам лучше убедиться, что имя файла file
не содержит пробелов. Если это так, попробуйте "file"
.
Как видите, это быстро становится очень уродливым. Я предлагаю вам поместить конвейер в сценарий оболочки. Тогда вы можете избежать кавычек и просто запустить скрипт с sh -c script.sh
.