다른 사용자가 (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에서 GNU bash 버전 4.2.53(1)-릴리스(x86_64-redhat-linux-gnu)를 실행하고 있습니다.

답변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에서는 문제가 아닌 것 같습니다.

관련 정보