오늘 퇴근하고 집에 와서(Ubuntu 시스템에서 bash 실행) 제가 사랑하는 zsh를 사용하여 로컬 아치 시스템에서 일부 코드를 실행하려고 했지만 명령이 실패했습니다.
다음 명령은 개인 정보와 IP를 명백히 변경합니다.
ffmpeg -i rtsp://user:[email protected]:5554/my-media/media.amp?videocodec=h264 -threads 3 -vcodec copy -f segment -segment_time 2 outfiles/cam_out%04d.mp4
Bash에서는 완벽하게 실행되지만 zsh에서 실행하면 오류가 발생합니다.
zsh: no matches found: rtsp://user:[email protected]:5554/my-media/media.amp?videocodec=h264
내 사랑하는 zsh가 왜 나를 배신했습니까?
답변1
문자열에서:
rtsp://user:[email protected]:5554/my-media/media.amp?videocodec=h264
이미 ?
해당 문자열에 있으므로 쉘이 실행됩니다.경로명 확장해당 문자열에서 다음을 사용하십시오.패턴 매칭규칙.
에서 옵션이 설정되지 않은 bash
경우 failglob
(기본값) 실패 모드는 그대로 유지됩니다.
$ echo does-not-exist?
does-not-exist?
옵션 set 에 대해서는 패턴 일치 오류가 보고되지 않지만 zsh
기본값은 다음과 같습니다.nomatch
$ echo does-not-exist?
zsh: no matches found: does-not-exist?
zsh
오류를 억제하고 패턴을 인쇄 할 수 있습니다 .
$ setopt nonomatch
$ echo does-not-exist?
does-not-exist?
다음을 켜서 옵션 세트 bash
와 유사한 동작을 만들 수 있습니다.zsh
nomatch
failglob
$ shopt -s failglob
$ echo does-not-exist?
bash: no match: does-not-exist?
보다 일반적으로는 셸 파일 이름 생성을 비활성화할 수 있습니다.
$ set -f
$ : "The command"
$ set +f
(또는 set -o noglob
, set +o noglob
)
또는 껍질 중 하나를 사용하십시오인용하다?
문자 그대로 특수 문자를 다른 패턴과 일치시키는 쉘 핸들을 만드는 방법입니다.
zsh
noglob
다음과 같은 간단한 명령에 대한 파일 이름 생성을 비활성화할 수 있는 내장 함수 도 제공됩니다 .
$ noglob echo *
*