file(1)
다른 명령의 출력 에서 명령 을 실행하고 싶지만 내가 얻는 것은
$ file -sL <(echo \#include \<stdio.h\>)
/dev/fd/63: ERROR: (null)
이는 file-5.04 (Red Hat Enterprise Linux Server 릴리스 6.8)에서 예상대로 작동하지만 file-5.14 (Wind River Linux 6.0.0.17)에서는 작동하지 않습니다.
file
사용 중인 libmagic 라이브러리의 버그입니다 .
간단한 해결 방법은 "고양이를 쓸모 없게 사용"하는 것입니다.
echo '#! /bin/sh' | file -
cat /path/to/fifo-or-special | file -
이 버그는 https://github.com/file/file/commit/fb6084e0f08 에서 처음 소개되었습니다 .
commit fb6084e0f08aef8991afcb3eb74168a456601908
Author: Christos Zoulas <[email protected]>
Date: Tue May 28 21:24:31 2013 +0000
don't print a space if there was an error. (from Jan Kaluza)
그런 다음 수정되었지만 https://github.com/file/file/commit/a9124dcb4e의 FIFO가 아닌 블록 및 문자 장치 에만 해당됩니다 . Linux 의 불완전한 수정 사항 은 https://github.com/file/file/commit/adbe541c32에 있습니다.<(...)
장치에 대한 수정 사항은 FIFO에 대해 복제 될 수 있습니다. 답변 끝에있는 패치를 참조하십시오 (이 사이트는 탭을 엉망으로 만들기 때문에 직접 적용하고 MIRROR ONLY repo에 위배됩니다).
그러나 여전히 남아 있습니다.
mkfifo fifo; file -s fifo
fifo: writable, no read permission
FIFO에 읽기 권한이 있기 때문에 어리 석고 잘못되었습니다.
이것을 고치는 것은 libmagic의 절반을 다시 작성하거나 끔찍한 혼란에 ifdef 스파게티와 특수 케이스를 추가하는 것을 의미합니다.
diff --git a/src/fsmagic.c b/src/fsmagic.c
index 5204f20d..20b7f438 100644
--- a/src/fsmagic.c
+++ b/src/fsmagic.c
@@ -270,8 +270,10 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
/* TODO add code to handle V7 MUX and Blit MUX files */
#ifdef S_IFIFO
case S_IFIFO:
- if((ms->flags & MAGIC_DEVICES) != 0)
+ if((ms->flags & MAGIC_DEVICES) != 0) {
+ return 0;
break;
+ }
if (mime) {
if (handle_mime(ms, mime, "fifo") == -1)
return -1;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다