저는 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 -100f
POSIX 지정되지 않았습니다. POSIX 구문은tail -f -n 100
- POSIX는
tail
최대 하나의 인수를 허용합니다. 여러 인수가 전달되면 동작이 지정되지 않습니다. 일부 구현(예: GNU)은tail
여러 파일을 병렬로 모니터링할 수 있지만 다른 구현은 그렇지 않습니다. 이를 위해 설계된 꼬리와 같은 명령을 설치해 볼 수 있습니다.multitail
$(find...)
Split+glob 연산자가 호출되므로 기본값을 사용하면$IFS
파일 경로에 공백, 탭, 줄 바꿈 또는 와일드카드가 포함된 경우 작업이 제대로 작동하지 않습니다.find
파일이 반환되지 않으면 stdintail
에서도 종료됩니다.
여기서 zsh
명령을 사용하고 다음과 같이 정의 할 수 있습니다.
tj() multitail ./**/*.o$1(.)
일치하는 파일이 없으면( tail
stdin을 사용하는 대신) 오류가 보고됩니다. 또한 대신 find
정렬된 파일 목록을 제공하고 숨겨진 파일이나 숨겨진 디렉터리의 파일을 건너뜁니다( D
필요한 경우 glob 한정자를 추가합니다).
>
이제 편집 내용에 따르면 을 실행할 때 tj
기본 >
보조 프롬프트가 ( )인 것을 확인하면 $PS2
별칭도 정의했을 가능성이 더 높습니다 tj
(다음과 같이 정의될 수 있음).뒤쪽에함수 정의 tj
, 그렇지 않으면 함수 정의 오류가 발생합니다 tj
).
예를 들어 실행하면 다음과 같은 내용이 표시됩니다.
alias tj='for sure'
(종료되지 않은 for
루프) 또는 자체 포함되지 않은 코드이며 셸은 이를 완료하라는 보조 프롬프트를 표시합니다.
별칭 정의 해제를 사용할 수 있습니다( unalias tj
존재하는 경우 정의에서 해당 정의를 제거하여 다음에 실행할 때 다시 표시되지 않도록 하십시오).~/.bashrc
bash
물론 *.o1234
.>