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

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

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

그런데 세미콜론에 오류가 있다고 나오네요 ;.

어떻게 하는지 아시나요?

답변1

이 명령은 잘 작동합니다.

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"

답변2

~처럼아누바바 라고, 당신의

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

;(결국 둘 중 하나도 필요하지 않지만 아프지는 않습니다).

답변3

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

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

답변4

&&다음과 같이 명령을 구분하는 데 사용됩니다 .

$ su -c "ls && ls"

관련 정보