C - система (""); Выполнять по одному - PullRequest
0 голосов
/ 17 июля 2010

У меня есть система («sudo apt-get update | sudo apt-get -y install apache2 zip unzip»); и т. д., но он выполняет все те же команды одновременно ?, как мне сделать так, чтобы он делал одну после того, как другая закончена?), некоторые могут попросить пользователя ввести информацию из apt-get, как мне разрешить это показывать

1 Ответ

5 голосов
/ 17 июля 2010

Этот символ канала (|) означает, что вывод sudo apt-get update направляется на вход sudo apt-get -y install apache2 zip unzip.Хотя это на самом деле не имеет никакого смысла, это означает, что оба запускаются одновременно, а это не то, что вам нужно.

Либо замените один вызов двумя отдельными вызовами system ():

system("sudo apt-get update");
system("sudo apt-get -y install apache2 zip unzip");

Обратите внимание, что когда вы вызываете system (), ваша программа не возобновляет работу, пока не завершится запущенный вами процесс, поэтому это означает, что первый вызов будет выполнен, а затем второй.

Или заменитеканал с && (не обязательно гарантирует работу, хотя на самом деле он должен работать в любой системе Linux):

system("sudo apt-get update && sudo apt-get -y install apache2 zip unzip");

Это означает, что правая часть команды будет выполняться только если левая-стороны выходит без ошибок (технически, имеет статус выхода 0).

Вместо этого вы также можете заменить канал точкой с запятой (;), которая должна выполнять обе команды в последовательности, независимо от выходастатус первой команды.

...