Я хотел бы использовать su -c
для запуска в качестве root несколько команд в целом. Я не хочу использовать дополнительный сценарий для этого.
Я попробовал следующее:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"
но он выполняет только ls
не первый.
Я попробовал следующее:
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
но это говорит о том, что есть ошибка с точкой с запятой ;
.
Ты знаешь как это сделать?
;
междуtcpdump
иls
командами - просто оставить вне и точки с запятой он будет работать.Как говорит Анубхава , ваш
команда не выполняется, потому что вы не можете
&
сразу же следовать;
. Вы можете увидеть это, просто набрав команды непосредственно в оболочке:true & true
работаетtrue & ; true
не работаетЕсли вы хотите, чтобы
tcpdump
команда выполнялась в фоновом режиме, удалите;
, как в(и вам не нужно
;
в конце, но это не больно).источник
Я думаю, что
nohup
команда тоже даст вам то, что вы хотите ... tcpdump работает в фоновом режиме (без амперсанда):источник
nohup
когда вы запускаете команды в фоновом режиме, но это действительно не имеет никакого отношения к этому вопросу. (2) Этот ответ неверен -nohup
сам по себе не запускает команду в фоновом режиме; вам все равно придется печатать&
(что оставляет нас там, где мы начали, с синтаксической ошибкой в команде).Просто добавлю к превосходному ответу Анубхавы :
Вы также можете использовать
{}
, как это:{}
немного эффективнее, чем()
в том, что он не создает вложенную оболочку.{}
действительно нужно пробел после{
и;
до,}
если у нас&
уже нет.источник
;
междуtcpdump
иls
командами - просто оставить из точки с запятой , и он будет работать.Используйте
&&
для разделения ваших команд следующим образом:источник
tcpdump
процесс в фоновом режиме,&&
ничего хорошего не получится.