Bash에서 su를 사용하여 여러 명령 실행


10

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;"

그러나 세미콜론에 오류가 있다고 말합니다 ;.

그렇게하는 방법을 알고 있습니까?

답변:


14

이 명령은 정상적으로 실행됩니다.

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"

물론, 영업 이익은 정말하지 않는 괄호를 추가 할 이유가 없다 정말 정말 유형 싶어 ;사이 tcpdumpls단지 세미콜론을 생략하고 작동 - 명령을.
G-Man, 'Reinstate

2

으로 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;"

(그리고 ;끝에도 필요 하지 않지만 아프지 않습니다).


1

나는 nohup명령이 당신에게 원하는 것을 얻을 것이라고 생각합니다 ... tcpdump가 백그라운드에서 실행됩니다 (앰퍼샌드가 필요 없음)

su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"

안녕하세요 그렇게 생각합니다. NOHUP은 사용자가 연결을 끊어도 명령을 백그라운드에서 실행합니다. 나는 그것을 기억하지 않았다. 고마워

(1) nohup백그라운드에서 명령을 실행할 때 사용 하는 것이 좋지만 실제로는이 질문과 관련이 없습니다. (2)이 대답은 틀리다 – nohup명령 자체가 백그라운드에서 실행되도록하지는 않는다. 당신은 여전히 ​​입력해야합니다 &(명령에서 구문 오류와 함께 우리가 시작한 곳으로 돌아갑니다).
G-Man, 'Reinstate

0

Anubhava의 탁월한 답변 에 추가하기 만하면됩니다 .

다음 {}과 같이 사용할 수도 있습니다 .

su root -c "{ tcpdump -i wlan0 -s 1500 -w CCCCCC & }; ls -lh"

{}()하위 셸을 만들지 않는 것보다 조금 더 효율적 입니다. 우리가 이미 가지고 있지 않는 한 전후 {}공간이 필요합니다 .{;}&


물론, 사용자가 정말하지 않는 한 전혀 중괄호 또는 괄호를 추가 할 이유가 없다 정말 정말 유형 싶어 ;사이 tcpdumpls명령을 - 단지 세미콜론을 생략하고 그것을 작동합니다.
G-Man, 'Reinstate

-1

다음 &&과 같이 명령을 구분하는 데 사용하십시오 .

$ su -c "ls && ls"

Auch .. 그건 내 오류 야. 백그라운드에서 프로세스를 실행하고 싶었지만 명령을 분리하기 위해이 &&에 대해 알지 못했습니다. Thx

3
&&는 "첫 번째 성공한 경우에만 두 번째 명령 만 실행"을 의미합니다. 첫 번째 명령 오류가 발생하면 두 번째 명령이 실행되지 않습니다. 이것은 일반적으로 좋지만 순전히 구분 기호로 &&를 설명하는 것을 망설입니다.
Leo

그리고 tcpdump백그라운드 에서 프로세스 를 실행 &&하려면 아무 것도 좋지 않습니다.
G-Man, 'Reinstate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.