셸 내의 변수로 출력을 리다이렉트하려면 어떻게 해야 하나요?
그런 대본이 있어요.
genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5
변수에서 genhash에 의해 생성된 스트림을 가져오고 싶습니다.변수로 리다이렉트하려면 어떻게 해야 하나요?$hash비교할 수 있을까요?
if [ $hash -ne 0 ]
then echo KO
exit 0
else echo -n OK
exit 0
fi
를 사용합니다.$( ... )구성:
hash=$(genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5)
TL;DR
저장하다"abc"안으로$foo:
echo "abc" | read foo
하지만 파이프는 포크를 만들기 때문에$foo파이프가 끝나기 전에, 그러니까...
echo "abc" | ( read foo; date +"I received $foo on %D"; )
물론, 이 모든 답변들은 작전본부가 요청한 것을 하지 않는 방법을 보여주고 있지만, 작전본부의 질문을 검색한 나머지 사람들을 정말 망치고 있다.
이 질문에 대한 답은 명령어를 사용하는 것입니다.
방법은 이렇습니다.
# I would usually do this on one line, but for readability...
series | of | commands \
| \
(
read string;
mystic_command --opt "$string" /path/to/file
) \
| \
handle_mystified_file
다음은 그 기능과 그 중요성입니다.
예를 들어, 이 경우,
series | of | commands는 매우 복잡한 일련의 명령어입니다.mystic_command는 파일 경로 대신 stdin으로 파일 내용을 받아들일 수 있지만 arg는 사용할 수 없으므로 변수로 입력해야 합니다.이 명령어는 수정된 내용을 출력하며 일반적으로 파일로 리디렉션되거나 다른 명령어로 파이핑됩니다(예:sed,awk,perl등)readstdin을 사용하여 변수에 배치한다.$string를 배치하다
read및 그mystic_command괄호를 통해 "sub shell"로 만들 필요는 없지만 마치 두 개의 명령어가 별도의 스크립트 파일에 있는 것처럼 연속 파이프처럼 흐르게 합니다.
항상 대안이 있습니다. 이 경우, 그 대안은 위의 예와 비교할 때 보기 흉하고 읽기 어렵습니다.
# my example above as a oneliner
series | of | commands | (read string; mystic_command --opt "$string" /path/to/file) | handle_mystified_file
# ugly and unreadable alternative
mystic_command --opt "$(series | of | commands)" /path/to/file | handle_mystified_file
내 방식은 전적으로 시간순과 논리적이다.대체 방법은 네 번째 명령어부터 시작하여 명령어 1, 2, 3을 명령어 치환에 포함시킵니다.
이 스크립트에 실제 예제가 있지만, 위의 예로는 사용하지 않았습니다.그것은 다른 미친/혼란/분열하는 bash 마법도 있기 때문입니다.
read hash < <(genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5)
이 기술은 "명령어 대체"와 혼동되지 않도록 Bash의 "프로세스 대체"를 사용합니다.
다음은 몇 가지 참고 자료입니다.
- http://www.linuxjournal.com/content/shell-process-redirection
- http://tldp.org/LDP/abs/html/process-sub.html
- http://tldp.org/LDP/abs/html/commandsub.html 비교 자료 참조
호환성이 있다고 생각합니다.
hash=`genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5`
하지만 나는 더 좋다
hash="$(genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5)"
수 $(...)함수의 기입을 검토해 주십시오.정의 시 사용 가능한 모든 로컬 변수에 액세스할 수 있습니다.
function getHash {
genhash --use-ssl -s $IP -p 443 --url $URL | grep MD5 | grep -c $MD5
}
hash=$(getHash)
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Functions
다음 작업을 수행할 수 있습니다.
hash=$(genhash --use-ssl -s $IP -p 443 --url $URL)
또는
hash=`genhash --use-ssl -s $IP -p 443 --url $URL`
파이프 전체를 변수에 할당하려면 위의 할당에서 파이프 전체를 사용할 수 있습니다.
사용할 때 오류가 발생할 수 있습니다.$(`code`)컨스트럭터
드디어 https://stackoverflow.com/a/7902174/2480481에서 접근하게 되었습니다.
기본적으로 Tee를 사용하여 다시 out을 읽고 변수에 넣는 것입니다.정상적인 출력은 출력에서 읽을수록 표시됩니다.
그렇지 않나요? 현재 작업 genhash는 단일 문자열 해시를 출력할 것입니다.
저는 아직 완전 출력 및 저장 명령어를 찾고 있습니다.안부 전해요.
호출할 명령어로 호출하는 함수를 만듭니다.이 경우에는 ruok 명령을 사용해야 합니다.
그런 다음 함수를 호출하고 결과를 변수에 할당합니다.이 경우 변수 상태에 결과를 할당합니다.
function ruok {
echo ruok | nc *ip* 2181
}
health=echo ruok *ip*
언급URL : https://stackoverflow.com/questions/2559076/how-do-i-redirect-output-to-a-variable-in-shell
'programing' 카테고리의 다른 글
| IFS=$'\n'의 정확한 의미는 무엇입니까? (0) | 2023.04.14 |
|---|---|
| Windows Scipy 설치: Lapack/Blas 리소스를 찾을 수 없음 (0) | 2023.04.14 |
| env: bash\r: 해당 파일 또는 디렉토리가 없습니다. (0) | 2023.04.14 |
| Bash 셸 스크립트에 문자열이 정의되어 있지 않은지 확인하는 방법 (0) | 2023.04.14 |
| 브라우저 창의 높이를 100%로 구분하는 방법 (0) | 2023.04.14 |