다른 사용자가 su -c를 통해 실행하면 명령이 다르게 동작합니다.

다른 사용자가 su -c를 통해 실행하면 명령이 다르게 동작합니다.

특정 체인과 일치하는 모든 프로세스를 종료하고 싶습니다. 훌륭하게 작동하는 스크립트는 다음과 같습니다.

echo `ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print $2 }'` | xargs kill

이제 "su -c"를 통해 다른 사용자로부터 이 스크립트를 실행하고 싶습니다.

echo password | su -c "echo `ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print $2 }'` | xargs kill" userName;

내 문제는 grep verySpecificChain여러 프로세스를 일치시킬 때 첫 번째 요소만 다음에 전달된다는 것입니다 xargs kill.

30598  ==> killed
bash: line 1: 30599: command not found  ==> Not killed
bash: line 2: 30600: command not found  ==> Not killed
bash: line 3: 30606: command not found  ==> Not killed

su -c명령 유무에 관계없이 동작이 변경되는 이유를 정말로 알고 싶습니다 .

저는 Fedora 20, 버전 4.2.53(1)-릴리스(x86_64-redhat-linux-gnu)에서 GNU bash를 실행하고 있습니다.

답변1

오직pkill -f verySpecificChain

답변2

귀하의 예에서 정확히 무엇이 실패했는지 설명할 수 없습니다(그래서 나는 이것이 내 쪽의 부두 프로그래밍이라는 것을 인정합니다), 그러나 내 bash(Debian)에서 작동하는 수정 사항은 다음과 같습니다(거의 아래 참조*).

  • 안에 있는 것을 제거하십시오 echo.
  • 탈출하다 $2.

결과:

echo password | su -c "ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print \$2 }' | xargs kill" userName;

su*데비안에서는 파이프에 에코 암호를 사용할 수 없기 때문에 "거의 작동함"이라고 썼습니다 . 이니셜 없이 실행 echo하고 대화형으로 비밀번호를 입력해야 합니다. OP의 Fedora에서는 이것이 문제가 아닌 것 같습니다.

관련 정보