명령의 출력을 다른 명령에 파일로 제공합니다.

명령의 출력을 다른 명령에 파일로 제공합니다.

다음과 같은 명령을 tor사용하여 구성 파일을 만들 수 있습니다 .cat <<EOF

cat <<EOF
SocksPort 9050
ControlPort 9150
DataDirectory /usr/var/lib/tor/torrc
EOF

>그러나 파일로 리디렉션하여 출력을 저장할 수 있습니다 . 그런 다음 사용tor -f file

하지만 직접 먹이는 방법은 무엇입니까 tor -f? 파일이나 임시 파일을 생성한 다음 삭제하고 싶지 않습니다.

  • 나는 다음과 같은 것을 원한다
    tor -f < $(cat <<EOF
    ...
    ...
    EOF)
    
    하지만 그것은 준다EOF): ambiguous redirect
  • 직접 리디렉션하시겠습니까?tor -f <<EOF... not worked
  • 그리고 파이프라인은 오류를 보고합니다.

감사해요

답변1

당신이 찾고 있는 것은 프로세스 대체라고 합니다. 이것은 쉘의 표준 기능은 아니지만 Bash/ksh/zsh에서 지원됩니다. 한 가지 예:

$ echo <(echo foo)
/dev/fd/63
$ cat <(echo foo)
foo

<(cmd)셸이 출력을 읽을 수 있도록 정렬된 파일 이름을 확장합니다 cmd. Linux에서는 가능 /dev/fd/NN하지만 시스템 및 셸에 따라 명명된 파이프일 수도 있습니다.

그래서, 당신이 사용할 수 있을 것 같아요

tor -f  <(cat <<EOF
...
...
EOF
)

위와 같은 경우 리디렉션을 대신 cat사용할 수 있습니다 . 이는 및 와 동일한 차이점 입니다 . 기본적으로 stdin을 읽으므로 둘 다 작동하지만 도구에 파일 이름이 필요한 경우 리디렉션이 추가되지 않습니다.cat < <(echo foo)cat <(echo foo)cat < somefilecat somefilecat


tor어쨌든, 위의 내용은 약간 복잡하므로 중간에 다른 과정 없이 그냥 here-doc을 읽는 것이 가장 좋습니다 . 표준 입력을 읽게 만들기만 하면 됩니다.

일부 유틸리티는 주어진 파일 이름이 이면 stdin에서 읽거나 stdout에 씁니다. -그러나 지원되지 않는 경우 (또는 )을 tor사용할 수 있으므로 이것이 작동할 수 있을 것 같습니다./dev/stdin/dev/stdout

tor -f /dev/stdin <<EOF
...
...
EOF

물론 다른 것을 위해 stdin이 필요하지 않는 한. 이 경우 여기에 설명된 대로 다른 fd를 사용할 수 있어야 합니다.

tor -f /dev/fd/9 9<<EOF
...
...
EOF

(지원 시스템이 필요하지만 /dev/fd/NN)

관련 정보