сменить каталог с конвейером в UNIX - PullRequest
2 голосов
/ 18 января 2011

Я пишу программу на C, которая в основном должна сменить каталог и вызвать другую программу.Я пробовал:

system("cd ... | ./test.exe");

, но, похоже, не работает.

Ответы [ 5 ]

2 голосов
/ 18 января 2011

Конечно, вы хотите сделать:

cd /this/is/a/dir && ./command
1 голос
/ 18 января 2011

Я собираюсь игнорировать использование функции system и отвечу так, как если бы команда конвейера была набрана в командной строке, для того, чтобы сформулировать эту мысль:

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

1 голос
/ 18 января 2011

попробовать:

system("cd ... ; ./test.exe");

(я полагаю ... это заполнитель для вашего каталога).

Если это не сработает, рассмотрите возможность создания короткого сценария (назовите его script.sh):

#!/bin/sh
cd ...
./test.exe

затем выполнить

system("./script.sh");
0 голосов
/ 18 января 2011

Я бы использовал

system("cd .. && ./test.exe");
0 голосов
/ 18 января 2011

"CD" не собирается работать с трубой. Попробуйте что-то вроде:

chdir("/path");<br/> system("./test.exe");

...