다음과 같은 명령을 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 < somefile
cat somefile
cat
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
)