2010-07-17 2 views
0

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

+0

Каковы признаки того, что вы считаете, что обе команды выполняются одновременно? – bits

+0

Все они находятся в одном системном вызове, но apt-get швы говорят, что он заблокирован, хотя нет процесса до этого системного вызова – Daniel

+0

есть ли причина, по которой вы используете C? – ghostdog74

ответ

5

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

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

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

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

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

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

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

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

+0

Спасибо !!!, отлично поработал! – Daniel

Смежные вопросы