배시 (bash 의 데이터를 처리할 수 있는 나는 얻으려고 하고 그러는데 stdin 으로 얻을 수 있지 않지만, 운빨이야. 무슨 말인지 하나도) 는 다음과 같은 작업:
echo "hello world" | test=($(< /dev/stdin)); echo test=$test
test=
echo "hello world" | read test; echo test=$test
test=
echo "hello world" | test=`cat`; echo test=$test
test=
여기서 I want to be 'test' = 출력물에는 hello world. # 39, ve, 퍼팅 " " i& 했다. ',' 에서 $ # 39, t, 작은 따옴표로 " test" doesn& 작업 중 하나.
사용
IFS= read var << EOF
$(foo)
EOF
echo "hello world" | { read test; echo test=$test; }
심지어 다음과 같은 함수를 작성할
read_from_pipe() { read "$@" <&0; }
그러나 there& 너회의 변수값 지정, s no point - # 39 마지막 않을 수 있습니다! 파이프라인 서브셸 생성할 수 있는 환경이 아닌 값에 상속됩니다 참조별로. 이 때문에 '읽기' doesn& 수는 없는 노릇, 파이프 - # 39 의 의견을 # 39 it& 정의되지 않았습니다.
FYI, http://www.etalabs.net/sh_tricks.html) 는 만원) 의 수집 및 차이로 셸, sh 의 쓸모 있는 데 필요한 기이 성전하라 보인다.
스케쳐내 많은 데이터를 읽을 수 있으며 이 같은 일이 별도로 각 줄의 작동합니까 사용할 수 있습니다.
cat myFile | while read x ; do echo $x ; done
스케쳐내 라인이 분할하고 분할하려면 여러 변수 x 대신 다음과 같은 여러 단어를 사용할 수 있습니다.
cat myFile | while read x y ; do echo $y $x ; done
또는:
while read x y ; do echo $y $x ; done < myFile
하지만 아무 것도 할 것을 시작하면 즉시 정말 똑똑한 대체하십시오 you& # 39 펄 스크립팅 언어를 위한 더 나은 것 같은 그런 정렬하려면, re 시도하시겠습니까 다음과 같은 일부 할 수 있습니다.
perl -ane 'print "$F[0]\n"' < myFile
이것은 또 다른 옵션을
$ read test < <(echo hello world)
$ echo $test
hello world
$ read a b c <<< $(echo 1 2 3)
$ echo $a $b $c
1 2 3
그러나 지켜보리니 @chepner& # 39 에 대한 자세한 내용은 '라스트피레 오토메이티드'.
첫 번째 시도에서 닫으십시오 예뻤다. 이 변화 노력해야 합니다.
echo "hello world" | { test=$(< /dev/stdin); echo "test=$test"; };
그리고 출력은 다음과 같습니다.
>. 테스트 = hello world
이후 묶으십시오 할당에서는 및 에코 테스트하려면 파이프하시겠습니까 중괄호 합니다.
괄호 없이 할당 (vora 대상지점으로 파이프 (pipe) 는 한 쉘로 테스트하려면, 테스트, 그리고 에코 " = $ test". # 39, t 는 별도의 쉘로 doesn& 있는 것도 알아 할당에서는. # 39 의 that& " 가져오는 조교하실 왜 테스트 = "; 대신, 누구없어요 world" " 출력 테스트 =.
왜냐면 난 가을 prosupport 싶습니다 드롭합니다 참고. 이 때문에 기존 sh 스크립트입니다 재작성할 하는데, 내가 찾은 스레드할 posix 호환 할 수 있다. 이 문제를 해결하기 위해 파이프 / 서브셸 POSIX 에서 선보인 것은 기본적으로 다음과 같은 코드를 다시
some_command | read a b c
salesforce.:
read a b c << EOF
$(some_command)
EOF
및 코드 다음과 같습니다.
some_command |
while read a b c; do
# something
done
salesforce.:
while read a b c; do
# something
done << EOF
$(some_command)
EOF
하지만 이 같은 행동을 rmw 언약보다는 비어 있는 입력입니다. 이 표시가 없는 낡은 대한 입력, while 루프 입력되지 않은 빈 그러나 이는 POSIX 표기법을!
오미스테드 수 없는. 비슷하게 동작하는 코드 (posix 있는 옛 표기법 다음과 같습니다.
while read a b c; do
case $a in ("") break; esac
# something
done << EOF
$(some_command)
EOF
대부분의 경우 이 아주 재미나겠네 부족합니다. 하지만 이 같은 동작을 정확히 옛 표기법을 죄송합니다. 아직 없습니다. 만약 빈 할말이다 some_command 인쇄 옛날 표기법을 바디입니다 실행될 때 그리고 우리는 몸이란다 앞에서 분할합니다 POSIX 표기법
방식으로 이 문제를 해결하려면 다음과 같습니다.
while read a b c; do
case $a in ("something_guaranteed_not_to_be_printed_by_some_command") break; esac
# something
done << EOF
$(some_command)
echo "something_guaranteed_not_to_be_printed_by_some_command"
EOF
다음 코드:
echo "hello world" | ( test=($(< /dev/stdin)); echo test=$test )
오픈 후 사용할 수 있는 것 역시 또 다른 새로운 서브노드 쉘로 파이프,
echo "hello world" | { test=($(< /dev/stdin)); echo test=$test; }
< hr>;
난 이미 활용할 수 있도록 작업 제어 비활성화하려면 체프너스 & # 39. 방법 (전) 에서 이 명령을 실행하는 털미널):
set +m;shopt -s lastpipe
echo "hello world" | read test; echo test=$test
echo "hello world" | test="$(</dev/stdin)"; echo test=$test
[Bash 수작업식 말한다] [2]:
>. 라스트피레 >. >. , 작업 제어 활성화되어 있지 않을 경우 세트 및 런입니다 마지막 명령 셸 >. 현재 쉘로 백그라운드에서 실행되지 파이프라인 >. 환경.
참고: 작업 제어 전원이 꺼져 있습니다 # 39 에서 기본적으로 비대화식 쉘로 don& 필요 없다 ',' 세트 및 카타시안 +m δ1 스크랩트.
[2]: http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html # 이 쇼프트 기본 제공
내 생각엔 조교하실 쓸 수 있는 셸 스크립트입니다 입력을 시행하십시오 stdin. 반면 정보기술 (it) 할 수 있는 인라인 시도 중인 잡을라는데 손실됩니다 만들려는 테스트 = 변수다. 내 생각엔 하지 않고 있으며, 이를 훨씬 감지에서 않니다 인라인 that& # 39 에 왜 예상대로 작동하지 않습니다.
I was trying to 줄일 수 있습니다.
$( ... | head -n $X | tail -n 1 )
특정 line) 를 얻기 위해 다양한 입력입니다. 그래서 입력할 수도.
cat program_file.c | line 34
그래서 작은 쉘로 데릭쉐퍼드와 stdin 에서 읽을 수 있는 프로그램. like you do.
22:14 ~ $ cat ~/bin/line
#!/bin/sh
if [ $# -ne 1 ]; then echo enter a line number to display; exit; fi
cat | head -n $1 | tail -n 1
22:16 ~ $
여깄군.
파이프 및 데이터를 읽을 수 있는 스마트 스크립트입니다 모두 명령줄이 인수만:
#!/bin/bash
if [[ -p /proc/self/fd/0 ]]
then
PIPE=$(cat -)
echo "PIPE=$PIPE"
fi
echo "ARGS=$@"
$ bash test arg1 arg2
ARGS=arg1 arg2
$ echo pipe_data1 | bash test arg1 arg2
PIPE=pipe_data1
ARGS=arg1 arg2
/proc/self/fd/0 -> pipe:[155938]
현재 터미널 가리키십시오 그렇지 않으면 된다.
/proc/self/fd/0 -> /dev/pts/5
이 경우 이 배시 '- p' 옵션을 컴포지션이 파이프 방관하겠나 확인할 수 있다.
'고양이' 에서 '-' 판독합니다 stdin.
우리가 사용하는 경우 '-' 이 'cat' stdin 없을 때, 그래서 우리가 '' 내 안의 경우 영생하리니 기다리는 상태라고 합니다.