내 FreeBSD 13.2 시스템에서 유틸리티는 압축되지 않은 텍스트 파일이나 zless
압축된 텍스트 파일을 보는 데 실패하고 해당 파일이 바이너리일 수 있다는 경고를 표시하며 내용을 보려는 경우 쓰레기를 표시합니다. 이상하게도 사용하거나 작동하는 것 같습니다.gzip
compress
zmore
gunzip -c
$ zless znapzend.log.1.gz
"znapzend.log.1.gz" may be a binary file. See it anyway?
(바이너리 데이터를 터미널로 보내려면 '예'라고 대답하세요.)
$ zless --version
less 608 (POSIX regular expressions)
Copyright (C) 1984-2022 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Home page: https://greenwoodsoftware.com/less
$ zmore --version
less 608 (POSIX regular expressions)
Copyright (C) 1984-2022 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Home page: https://greenwoodsoftware.com/less
그 이유는 무엇입니까?
답변1
less
간단히 말해서 이는 "안전" 모드에서 실행될 때 내부 파이프 명령이 비활성화되어 있기 때문입니다 . 즉, if is LESSOPEN
로 시작할 수 없습니다 .|
LESSSECURE
1
잠시 동안 조사한 후 실행 파일 자체를 살펴 zless
보았습니다 .zmore
FreeBSD에서는 둘 다 쉘 스크립트이지만 zmore
보다 전통적인 래퍼 gzip
(압축 해제용)와 less
(압축 해제된 문서 보기용) zless
더 짧은 쉘 스크립트 호출을 수행 less
하고 환경 변수를 LESSOPEN
Call the script로 설정합니다 /usr/bin/lesspipe.sh
.
#!/bin/sh
#
# $FreeBSD$
#
export LESSOPEN="||/usr/bin/lesspipe.sh %s"
exec /usr/bin/less "$@"
그런 다음 lesspipe.sh
스크립트 case
에는 입력 파일의 파일 이름 접미사를 기반으로 올바른 압축 해제 유틸리티를 호출하는 명령문이 포함되어 있지만 여기서는 중요하지 않습니다. 요점은 LESSOPEN
내부 파이프 명령이 환경 변수에 사용된다는 것입니다.
환경 변수가 LESSSECURE
로 설정된 1
경우 less
"안전" 모드에서 실행됩니다 . 이 경우 유틸리티는 |
(파이프) 명령을 무시합니다.
퍼즐의 마지막 부분은 LESSSECURE=1
쉘의 초기화 파일에서 실제로 이것을 설정했다는 것을 기억하는 것입니다.