2013-01-07 2 views
0

좋아 더 복잡한 명령을 실행, 그래서 나는 다음과 같은 방법으로 실행하려는 test_xxvalidate_xx 파일의 무리가합니다 : 등등배쉬 스크립트는 찾아

./path/test_01 | ./server | ./path/validate_01 

./path/test_02 | ./server | ./path/validate_02 

을 ... 그리고.

이제이 모든 다른 스크립트를 찾아 이러한 방식으로 실행하는 run_all 스크립트를 만들고 싶습니다.

  1. (! 중요) 내가 어떻게 만들 수 있습니다

    find ./*/ -name test_01 -exec {} \; 
    

    그래서, 나는 두 가지 문제가 있습니다

    나는, test_01를 찾아 예를 들어, 단지 실행하기 위해 다음과 같은 코드를 사용할 수 있습니다 bash는 파이핑과 두 개의 알 수없는 디렉토리를 검색하여 위의 더 복잡한 행을 실행합니까? 단일 명령을 실행하는 방법 만 찾을 수 있습니다.

  2. (덜 중요하지만 여전히 문제 ...)이 스크립트를 루프하는 가장 좋은 방법은 디렉토리의 모든 테스트/유효성 검사 스크립트를 실행 한 다음 중지하는 것입니다. 스크립트는 현재 test_01, test_02, ..., test_26 (유사 validate_xx에 대한) 이름이 지정됩니다 -하지만 난 test_27 등

+0

이 하나를 시도 찾을 수 있습니다. -name "test_ *"| xargs -i sh -c '{} | ./server | 'echo {} | sed 's/test_/validate _ /'' ' –

답변

1

, 당신은 사용할 필요가 없습니다 find :

for test in path/test*; do $test | ./server | ${test/test/validate}; done 

BTW, 유용한 맛집 : ${a/b/c} 구문 : 변수 a의 값을 받아 bc으로 바꿉니다. 당신이 찾을 필요가 있다면

, 당신은 쉘 스크립트 내부에 재 포장 할 수 있습니다

find dir -exec sh -c '... | ... | ...' \; 

편집 : 좀 더 구체적으로,

find . -name test\* -exec sh -c ' 
    test={} 
    validate=${test/test/validate} 
    $test | ./server | $validate 
' \; 
+0

테스트는 다른 폴더에 저장되므로 find를 사용해야합니다 - 죄송합니다. (그러나 각 test_xx 스크립트는 해당 validation_xx 스크립트와 같은 폴더에 있습니다. 따라서 여기에 바로 가기를 사용할 수 있습니다.) 관련 코드 비트는 이제 다음과 같습니다 (i = "1"로 시작). 찾기 ./*/ -name test_0 $ i -exec sh -c '{} | ./server ' ... 어떤 작품 이니, 제대로 된 것 같습니다. 그러나 validate_01을 통합하는 방법은 무엇입니까? 흠 ... –

+0

@ 토미로드 : 좋아,이 트릭을해야한다고 생각합니다. 명시 적 루프가 필요 없으며,'find' 자체가 필요한 모든 루프입니다. – Amadan

+0

감사합니다 !! 위에 추가 한 "편집"은 완벽하게 작동하며 시도하고있는 것과 같은 색인 생성 변수가 필요하지 않습니다. 내가 나를 허용 할만큼 충분히 오랫동안이 사이트에 있었 더라면 나는 되돌아와 당신의 대답을 upvote 할 것이다! –

0

사용에게 for 루프를 추가하면 나는 변경하지 않고, 여전히 작동하는 스크립트를 원하는 . 예를 들어, 테스트를 통해 루프는 매개 변수 확장을 통해 그들로부터 수를 추출 할 수 있습니다 : 그들은 여러 디렉토리에 걸쳐하지 않는 경우

for test in ./path/test_[0-9][0-9] ; do 
    "$test" | ./server | ./path/validate_${test: -2} 
done