2010-11-25 5 views
4

프로그램에 대한 입력 파일에 대해 프로세스 대체를 사용하려고하는데 작동하지 않습니다. 일부 프로그램이 입력 파일에 대한 프로세스 대체를 허용하지 않기 때문입니까?일부 프로그램은 입력 파일의 프로세스 대체를 허용하지 않습니까?

하면 작동하지 않습니다 다음

bash -c "cat meaningless_name" 
    >sequence1 
    gattacagattacagattacagattacagattacagattacagattacagattaca 
    >sequence2 
    gattacagattacagattacagattacagattacagattacagattacagattaca 
bash -c "clustalw -align -infile=<(cat meaningless_name) -outfile=output_alignment.aln -newtree=output_tree.dnd" 
    (Less verbose output, finishing with: 
    No sequences in file. No alignment! 

를하지만 다음과 같은 컨트롤이 작업을 수행 자체가 작동이 과정 대체를 제안하지만, CLUSTALW 프로그램 자체가 마음에 들지 않는

bash -c "clustalw -align -infile=meaningless_name -outfile=output_alignment.aln -newtree=output_tree.dnd" 
    (Verbose output, finishing with: 
    CLUSTAL-Alignment file created [output_alignment.aln] 
bash -c "cat <(cat meaningless_name) > meaningless_name2" 
diff meaningless_name meaningless_name2 
    (No output: the two files are the same) 
bash -c "clustalw -align -infile=meaningless_name2 -outfile=output_alignment.aln -newtree=output_tree.dnd" 
    (Verbose output, finishing with: 
    CLUSTAL-Alignment file created [output_alignment.aln] 

프로세스 대체 - 아마도 비표준 파일을 생성하거나 비정상적인 파일 이름으로 파일을 생성하기 때문일 수 있습니다.

프로그램에서 프로세스 대체를 허용하지 않는 것이 일반적입니까? 이것이 문제인지 어떻게 확인할 수 있습니까?

저는 Ubuntu 9.10에서 GNU bash 버전 4.0.33 (1) -release (x86_64-pc-linux-gnu)를 실행하고 있습니다. Clustalw는 2.0.10 버전입니다.

답변

3

예. 다른 프로그램에서도 같은 것을 느꼈습니다. 예를 들어, 이맥에서도 작동하지 않습니다. 그것은 "파일은 존재하지만 읽을 수 없습니다"라고 알려줍니다. 그리고 그것은 확실히 나를위한 특별한 파일입니다. /proc/self/fd/some_number. 그리고 less 또는 most 중 하나가 안정적으로 작동하지 않으며 기본 설정으로되어 있습니다. 대부분의

:

most <(/bin/echo 'abcdef') 

짧은 표시 아무것도. 값이 길수록 시작 부분이 잘립니다. less은 분명히 작동하지만, 사용자가 -f을 지정한 경우에만 작동합니다.

실제로 zsh의 =이 훨씬 더 유용합니다. 구문 상 동일합니다 (< 대신 = 제외). 그러나 그것은 단지 임시 파일을 생성하기 때문에 지원은 프로그램에 의존하지 않습니다.

편집 : zsh을 발견

임시 파일 이름을 선택 TMPPREFIX를 사용합니다. 그러므로 실제 /tmptmpfs이되기를 원하지 않는다고해도 zsh 용으로 마운트 할 수 있습니다.

+0

임시 파일이 하드 드라이브의 파일입니까, 아니면 RAM에만 있습니까? 나는 하드 드라이브를 치는 것을 피하기를 바랬다. –

+0

저에게 그것은'/ tmp/zshXXX'입니다. 따라서 [tmpfs] (http://en.wikipedia.org/wiki/Tmpfs)를 꽤 쉽게 사용할 수 있습니다. –

+1

[* zsh * 프로세스 대체 문서] (http://zsh.sourceforge.net/Doc/Release/Expansion.html#SEC67)에서는 프로세스의'<() '형식을 사용할 때 발생할 수있는 문제 중 일부에 대해 자세히 설명합니다 리디렉션 : lseek (2)가 작동 할 것으로 예상하고, 인수를 처리하기 전에 fds를 닫을 수 있습니다 (가능한 보안 기능). 명령이 대체 된 fd를 읽지 않으면 하위 프로세스가 중단됩니다. 첫 번째 질문은이 질문의 경우에 가장 가능성이 높습니다. –

7

프로세스 대체는 명명 된 파이프를 만듭니다. 명명 된 파이프를 찾을 수 없습니다.