찾기 기능의 출력으로 제공된 파일을 추적하는 방법은 무엇입니까? [폐쇄]

찾기 기능의 출력으로 제공된 파일을 추적하는 방법은 무엇입니까? [폐쇄]

저는 Unix 환경이 처음입니다. 클러스터의 계산 결과를 모니터링하는 함수를 사용하고 싶습니다. 나는 이 기능을 시도해 보았고 이를 별칭 섹션 아래의 .bashrc 파일에 넣었습니다.

function tj(){ 
    tail -100f $(find . -type f -name "*.o$1")
}

그런 다음

tj 1234

파일의 내용을 보면 dm.o1234내가 원하는 것은 아무것도 없고 실제로는 아무 것도 얻지 못합니다(단지 >).

오류가 어디에 있는지 아시나요?

답변1

문제의 정확한 원인이 무엇인지는 알 수 없지만 코드는 다음과 같습니다.명시되지 않은영토는 여기입니다.

  • function tj()tj()표준 함수 정의 구문이 아니며 Bourne/POSIX 구문(사용됨 )도 Korn 구문(사용되지 function tj않음 ()) 도 아닙니다 . 일부 쉘(bash, zsh, pdksh)은 대부분 우연히 이를 지원합니다.
  • tail -100fPOSIX 지정되지 않았습니다. POSIX 구문은tail -f -n 100
  • POSIX는 tail최대 하나의 인수를 허용합니다. 여러 인수가 전달되면 동작이 지정되지 않습니다. 일부 구현(예: GNU)은 tail여러 파일을 병렬로 모니터링할 수 있지만 다른 구현은 그렇지 않습니다. 이를 위해 설계된 꼬리와 같은 명령을 설치해 볼 수 있습니다.multitail
  • $(find...)Split+glob 연산자가 호출되므로 기본값을 사용하면 $IFS파일 경로에 공백, 탭, 줄 바꿈 또는 와일드카드가 포함된 경우 작업이 제대로 작동하지 않습니다. find파일이 반환되지 않으면 stdin tail에서도 종료됩니다.

여기서 zsh명령을 사용하고 다음과 같이 정의 할 수 있습니다.

tj() multitail ./**/*.o$1(.)

일치하는 파일이 없으면( tailstdin을 사용하는 대신) 오류가 보고됩니다. 또한 대신 find정렬된 파일 목록을 제공하고 숨겨진 파일이나 숨겨진 디렉터리의 파일을 건너뜁니다( D필요한 경우 glob 한정자를 추가합니다).


>이제 편집 내용에 따르면 을 실행할 때 tj기본 >보조 프롬프트가 ( )인 것을 확인하면 $PS2별칭도 정의했을 가능성이 더 높습니다 tj(다음과 같이 정의될 수 있음).뒤쪽에함수 정의 tj, 그렇지 않으면 함수 정의 오류가 발생합니다 tj).

예를 들어 실행하면 다음과 같은 내용이 표시됩니다.

alias tj='for sure'

(종료되지 않은 for루프) 또는 자체 포함되지 않은 코드이며 셸은 이를 완료하라는 보조 프롬프트를 표시합니다.

별칭 정의 해제를 사용할 수 있습니다( unalias tj존재하는 경우 정의에서 해당 정의를 제거하여 다음에 실행할 때 다시 표시되지 않도록 하십시오).~/.bashrcbash

물론 *.o1234.>

관련 정보