다른 명령의 출력에 대해 명령 을 실행하고 싶지만 file(1)
얻을 수 있는 것은
$ file -sL <(echo \#include \<stdio.h\>)
/dev/fd/63: ERROR: (null)
이는 파일 5.04(Red Hat Enterprise Linux Server 릴리스 6.8)에서는 예상대로 작동하지만 파일 5.14(Wind River Linux 6.0.0.17)에서는 작동하지 않습니다.
답변1
사용중인 libmagic 라이브러리의 버그입니다 file
.
간단한 해결 방법은 "쓸데없는 고양이 사용"입니다.
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)
그땐 고쳐졌지만오직FIFO가 아닌 블록 및 문자 장치의 경우https://github.com/file/file/commit/a9124dcb4e. 안불완전한<(...)
Linux 에 대한 수정 사항이 포함되었습니다.https://github.com/file/file/commit/adbe541c32.
장치에 대한 수정 사항은 FIFO에 대해 복제될 수 있습니다. 답변 끝에 있는 패치를 참조하세요(이 사이트는 탭을 엉망으로 만들기 때문에 직접 적용하고 미러 전용 저장소에 위배된다는 점을 명심하세요).
하지만 여전히 남아 있습니다.
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;