아래 모두를 작성한 후 grep 문을 발견했습니다. ksh가 '이 범위의 값 확장'의 표시기로 ..
을 지원하지 않는다는 것을 상기하십시오. (나는 그것이 당신의 의도라고 생각합니다). 또한 grep에 대한 인수를 인용하지 않아서 모호 해졌습니다. 쉘이 변환 할 구문을 사용하고 있다면 grep에 어떤 reg-exp가 보내지는지 알 수 없습니다. 따옴표로 묶지 않은 값이 필요한지 확실히 알지 못하는 한, 항상 인수를 인용하는 것이 좋습니다.
grep '1[1-6]:[0-9][0-9]' | grep '24.12.2012'
또한 '사용자가'임의의 문자 '연산자'를 사용하고 있습니까? '로 다시 작성하십시오. 또는 마침표 만 일치 시키시겠습니까? 마침표 만 일치 시키려면 \.
처럼 이스케이프 처리해야합니다.
마지막으로 처리중인 파일이 Windows 컴퓨터에서 생성 된 다음 Unix/Linux로 전송 된 경우 줄 끝 (Ctrl-MCtrl-J) (\ r \ n)이 너에게 문제가 생겼어. dos2unix file [file2 ...]
으로 PC 기반 파일 (또는 ftp를 통해 전송 된 파일)을 정리하십시오.
위의 내용이 도움이되지 않는 경우 문제를 디버그하려면 "나누고 정복해야합니다." 나는 다음과 같은 테스트를했을 때
, 나는 당신에게 UUOC을 가져올 것이다
$ echo "var1" | while read line ; do print "line=${line}" ; done
line=var1
$ vi Test.txt
$ cat Test.txt
var1
$ cat Test.txt | while read line ; do print "line=${line}" ; done
line=var1
귀하의 질문에 관련없는,하지만 의견이 맥락에서 cat
commnad의 사용입니다 원인이 확실 예상 출력을 가지고 장학금. 즉, 하나
#!/bin/ksh -vx
같은 스크립트합니다 (오두막 라인)의 외형을 변경하여 쉘 디버깅/추적 옵션을 켜 지금, 당신의 문제를 해결하기 위해
while read line ; do print "line=${line}" ; done < Test.txt
그러나로 쓸 수있다 또는, 단지이 라인의 상태를 추적하기 위해 일치하는 쌍을 사용하여 즉
set -vx
while read line; do
print -u2 -- "#dbg: Line=${line}XX"
autosys_showJobHistory.sh $line \
| grep 1[1..6]:[0..9][0..9] \
| grep 24.12.2012 \
| tail -1
done < Test.txt
set +vx
내가 추가 디버깅 단계를 추가 한의는 print -u2 -- ....
(U2 = stderror는 - 인쇄를위한 옵션 처리를 종료) 이제 출력을보고 여분의 공백이나 탭 문자가 들어오는 것을 확인할 수 있습니다.
$line
을 인용하지 않아도되므로 중요하지 않습니다. 테스트의 일환으로 "${line}"
을 인용하는 것이 좋습니다.
그런 다음 꼬리와 grep 줄을 주석 처리합니다. 당신은 어떤 단계가 이것이 깨지는 원인인지 알고 싶습니까? 그렇다면 autosys_script 자체가 여전히 예상하고있는 중간 출력을 생성합니까? 그런 다음 autosys + 1 grep은 예상대로 +2 greps, + tail을 출력합니까? 출력을 잃어 버리는 곳을 쉽게 볼 수 있어야합니다.
ihth