Я собираюсь игнорировать использование функции system
и отвечу так, как если бы команда конвейера была набрана в командной строке, для того, чтобы сформулировать эту мысль:
Когда вы создаете конвейер, такой как cd somedir | ./test.exe
, оболочке разрешается выполнять каждую команду конвейера в отдельной среде подоболочки. Кроме того, нет гарантии, что они будут выполняться в строгом порядке слева направо. Таким образом, команда cd не влияет на среду test.exe так, как вы ожидаете. cd
, будучи встроенной оболочкой, может влиять только на среду оболочки, в которой он выполняется, и в этом случае это будет подоболочка, созданная как часть настройки конвейера, а не оболочка, в которую была введена команда конвейера.