프로세스 대체와 결합된 입력 리디렉션을 이해하려고 합니다. bash
3개를 사용하고 있어요
예 tr
는 다음과 같습니다
$ tr "o" "a" <(echo "Foo")
tr: extra operand `/dev/fd/63'
Try `tr --help' for more information.
왜 이것이 작동하지 않는지 이해한다고 생각합니다. 프로세스 대체는 표준 입력만 읽는 <( )
파일 설명자를 생성합니다 .tr
올바른 리디렉션으로 작동하게 하려면 어떻게 해야 합니까?
나는 단순히 파이프를 사용할 수 있다는 것을 알고 있습니다.
$ echo "Foo" | tr "o" "a"
Faa
그러나 나는 더 나은 이해를 얻기 위해 노력하고 있습니다. man bash
의 도움으로 몇 가지를 시도했지만 실제로 <&
무엇을 하고 있는지 잘 모르겠습니다.
프로세스 대체를 올바르게 사용하는 방법은 무엇입니까 tr
?
답변1
너희들은 정말 친하다:
tr "o" "a" < <(echo "Foo")
대체는 <()
파일 설명자를 생성하고 경로를 셸에 붙여넣습니다. 이해하기 쉽도록 다음을 실행하십시오.
<(echo blubb)
오류가 표시됩니다.
-bash: /dev/fd/63: Permission denied
그렇기 때문에 단순한 파이프이기 때문에 /dev/fd/63
쉘에 붙여넣고 실행할 수 없습니다. 위의 예 /dev/fd/63
에서는 파이프에 쓰는 명령과 입력 리디렉션을 통해 파일 설명자에서 읽는 명령 입니다 .tr
echo "Foo"
<
tr
답변2
찾았어요배쉬 퀴프 설명시리즈는 이러한 모든 것에 대해 더 많이 배우기에 좋습니다.
특히 위에 링크된 기사는 모두 입력 리디렉션에 관한 것입니다.
위의 특정 예를 해결하려면 다음을 수행하십시오.
> tr "o" "a" <<< $(echo "Foo")
Faa