여기 문서 내부의 bash 스크립트가 예상대로 작동하지 않습니다.

Aestrivex

다음은 실패하는 최소한의 테스트 케이스입니다.

#!/bin/tcsh

#here is some code in tcsh I did not write which spawns many processes.
#let us pretend that it spawns 100 instances of stupid_test which the user kills
#manually after an indeterminate period

/bin/bash <<EOF
#!/bin/bash
while true
do
if [[ `ps -e | grep stupid_test | wc -l` -gt 0 ]]
then
  echo 'test program is still running'
  echo `ps -e | grep stupid_test | wc -l`
  sleep 10
else
  break
fi
done
EOF

echo 'test program finished'

stupid_test 프로그램은 다음과 같이 구성됩니다.

#!/bin/bash
while true; do sleep 10; done

의도 된 동작은 stupid_test가 종료 될 때까지 (이 경우 사용자가 수동으로) 실행 한 다음 10 초 이내에 종료하는 것입니다. 관찰 된 동작은 스크립트가 종료되지 않고 ps -e | grep stupid_test | wc -l프로그램이 종료 된 후에도 == 1로 평가 된다는 것입니다 (그리고 더 이상 ps 아래에 표시되지 않음).

bash 스크립트가 here 문서가 아닌 직접 실행되면 의도 한 동작이 복구됩니다.

나는 내가 아주 어리석은 일을하고 있다고 느낀다. 나는 가장 경험이 많은 쉘 해커가 아니다. 왜 이러는 거죠?

야노스

일반적으로 grep프로세스의 이름 을 입력하려고하면 다음과 같이 추가로 일치하는 행이 표시 grep됩니다.

$ ps xa | grep something
57386 s002  S+     0:00.01 grep something

따라서 매칭 프로세스가없는 경우에도 하나의 매칭 라인을 얻게됩니다. grep -v grep파이프 라인 에를 추가하여 문제를 해결할 수 있습니다 .

ps -e | grep stupid_test | grep -v grep | wc -l

tripleee가 제안 했듯이 더 나은 수정은 다음 grep과 같이 작성하는 것입니다.

ps -e | grep [s]tupid_test

패턴의 의미는 정확히 동일하지만 grep문자열 "grep [s]tupid_test"이 정규식과 일치하지 않기 때문에 더 이상 자체적으로 일치하지 않습니다 /[s]tupid_test/.

Btw 나는 당신의 스크립트를 다음과 같이 다시 작성할 것입니다.

/bin/bash <<EOF
while :; do
  s=$(ps -e | grep [s]tupid_test)
  test "$s" || break
  echo test program is still running
  echo "$s"
  sleep 10
done
EOF

또는 더 게으르지 만 아마도 충분한 변형 ( bryn으로 암시 ) :

/bin/bash <<EOF
while ps -e | grep [s]tupid_test
do
  echo test program is still running
  sleep 10
done
EOF

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

BASH의 IF 문이 예상대로 작동하지 않습니다.

분류에서Dev

if 문 자바 스크립트의 for 루프가 예상대로 작동하지 않습니다.

분류에서Dev

자바 스크립트 계산기의 피연산자가 예상대로 작동하지 않습니다.

분류에서Dev

scp 명령이 bash 스크립트에서 예상 내에서 작동하지 않습니다.

분류에서Dev

Awk가 bash 스크립트 내에서 작동하지 않습니다.

분류에서Dev

SFTP에 대한 스크립트가 bash에서 작동하지 않습니다.

분류에서Dev

IF 문의 Linux Bash OR 연산자가 예상대로 작동하지 않았습니다.

분류에서Dev

예기치 않은 "("-셸 스크립트는 bash가있는 CentOS에서 작동하지만 Ubuntu에서는 작동하지 않습니다.

분류에서Dev

Google Script는 2 개의 개별 스크립트로 작동하지만 동일한 기능 내부에서는 작동하지 않습니다.

분류에서Dev

envsubst가 bash for 루프에서 예상대로 작동하지 않습니다.

분류에서Dev

Bash의 비트 연산이 예상대로 작동하지 않습니다.

분류에서Dev

자바 스크립트의 여러 기능은 단독으로 작동하지만 하나의 스크립트에서는 작동하지 않습니다.

분류에서Dev

서로 내부의 lapply 함수가 예상대로 작동하지 않습니다.

분류에서Dev

내 bash 스크립트에서 probabely "loop"및 "output"이 제대로 작동하지 않습니다.

분류에서Dev

bash 스크립트 내에서 실행하면 "기록"이 작동하지 않습니다.

분류에서Dev

bash 스크립트 내에서 실행하면 "기록"이 작동하지 않습니다.

분류에서Dev

bash 스크립트가 crontab을 통해 예상대로 작동하지 않습니다.

분류에서Dev

printf로 bash에서 내보내기가 작동하지 않습니다.

분류에서Dev

crontab의 Bash 스크립트가 작동하지 않습니다.

분류에서Dev

PHP의 문자열 바꾸기가 예상대로 작동하지 않습니다.

분류에서Dev

내 awk 사용자 기능이 bash 스크립트에서 작동하지 않습니다.

분류에서Dev

bash 스크립트의 Grep이 제대로 작동하지 않습니다.

분류에서Dev

VB의 비동기가 예상대로 작동하지 않습니다.

분류에서Dev

`UItableViewCell` 내부의`UIImage`로드가 예상대로 작동하지 않습니다.

분류에서Dev

if 문이있는 For 루프가 bash에서 예상대로 작동하지 않습니다.

분류에서Dev

서브 쉘의 소스가 예상대로 작동하지 않습니다.

분류에서Dev

과학 표기법의 데이터에서 "sort -g"가 예상대로 작동하지 않습니다.

분류에서Dev

bash elif가 예상대로 작동하지 않습니다.

분류에서Dev

DrawElements가 여러 개체에서 예상대로 작동하지 않습니다.

Related 관련 기사

  1. 1

    BASH의 IF 문이 예상대로 작동하지 않습니다.

  2. 2

    if 문 자바 스크립트의 for 루프가 예상대로 작동하지 않습니다.

  3. 3

    자바 스크립트 계산기의 피연산자가 예상대로 작동하지 않습니다.

  4. 4

    scp 명령이 bash 스크립트에서 예상 내에서 작동하지 않습니다.

  5. 5

    Awk가 bash 스크립트 내에서 작동하지 않습니다.

  6. 6

    SFTP에 대한 스크립트가 bash에서 작동하지 않습니다.

  7. 7

    IF 문의 Linux Bash OR 연산자가 예상대로 작동하지 않았습니다.

  8. 8

    예기치 않은 "("-셸 스크립트는 bash가있는 CentOS에서 작동하지만 Ubuntu에서는 작동하지 않습니다.

  9. 9

    Google Script는 2 개의 개별 스크립트로 작동하지만 동일한 기능 내부에서는 작동하지 않습니다.

  10. 10

    envsubst가 bash for 루프에서 예상대로 작동하지 않습니다.

  11. 11

    Bash의 비트 연산이 예상대로 작동하지 않습니다.

  12. 12

    자바 스크립트의 여러 기능은 단독으로 작동하지만 하나의 스크립트에서는 작동하지 않습니다.

  13. 13

    서로 내부의 lapply 함수가 예상대로 작동하지 않습니다.

  14. 14

    내 bash 스크립트에서 probabely "loop"및 "output"이 제대로 작동하지 않습니다.

  15. 15

    bash 스크립트 내에서 실행하면 "기록"이 작동하지 않습니다.

  16. 16

    bash 스크립트 내에서 실행하면 "기록"이 작동하지 않습니다.

  17. 17

    bash 스크립트가 crontab을 통해 예상대로 작동하지 않습니다.

  18. 18

    printf로 bash에서 내보내기가 작동하지 않습니다.

  19. 19

    crontab의 Bash 스크립트가 작동하지 않습니다.

  20. 20

    PHP의 문자열 바꾸기가 예상대로 작동하지 않습니다.

  21. 21

    내 awk 사용자 기능이 bash 스크립트에서 작동하지 않습니다.

  22. 22

    bash 스크립트의 Grep이 제대로 작동하지 않습니다.

  23. 23

    VB의 비동기가 예상대로 작동하지 않습니다.

  24. 24

    `UItableViewCell` 내부의`UIImage`로드가 예상대로 작동하지 않습니다.

  25. 25

    if 문이있는 For 루프가 bash에서 예상대로 작동하지 않습니다.

  26. 26

    서브 쉘의 소스가 예상대로 작동하지 않습니다.

  27. 27

    과학 표기법의 데이터에서 "sort -g"가 예상대로 작동하지 않습니다.

  28. 28

    bash elif가 예상대로 작동하지 않습니다.

  29. 29

    DrawElements가 여러 개체에서 예상대로 작동하지 않습니다.

뜨겁다태그

보관