su -c
루트 여러 명령을 모두 실행하는 데 사용 하고 싶습니다 . 이를 위해 추가 스크립트를 사용하고 싶지 않습니다.
나는 다음을 시도했다.
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;"
그러나 세미콜론에 오류가 있다고 말합니다 ;
.
그렇게하는 방법을 알고 있습니까?
답변
이 명령은 정상적으로 실행됩니다.
su root -c "date; ls -lh"
그러나이 명령에서 :
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
당신이 가지고 있기 때문에 &
전에 ;
그러므로 당신은 오류를 받고 있습니다. &
명령을 제거했다 가 다시 실행하십시오.
또는 다음과 같이 명령을 실행할 수 있습니다.
su root -c "(tcpdump -i wlan0 -s 1500 -w CCCCCC &); ls -lh"
답변
으로 anubhava는 말한다 , 당신을
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"
바로 뒤에을 (를) 입력 할 수 없으므로 명령이 실패
&
했습니다 ;
. 셸에 직접 명령을 입력하여이를 확인할 수 있습니다.
true & true
공장true & ; true
작동하지 않습니다
당신이 원하는 경우 tcpdump
백그라운드에서 실행하는 명령을의 제거 ;
와 같이,
su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ls -lh;"
(그리고 ;
끝에도 필요 하지 않지만 아프지 않습니다).
답변
나는 nohup
명령이 당신에게 원하는 것을 얻을 것이라고 생각합니다 … tcpdump가 백그라운드에서 실행됩니다 (앰퍼샌드가 필요 없음)
su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"
답변
Anubhava의 탁월한 답변 에 추가하기 만하면됩니다 .
다음 {}
과 같이 사용할 수도 있습니다 .
su root -c "{ tcpdump -i wlan0 -s 1500 -w CCCCCC & }; ls -lh"
{}
()
하위 셸을 만들지 않는 것보다 조금 더 효율적 입니다. 우리가 이미 가지고 있지 않는 한 전후 {}
공간이 필요합니다 .{
;
}
&
답변
다음 &&
과 같이 명령을 구분하는 데 사용하십시오 .
$ su -c "ls && ls"