설치하려는 일부 소프트웨어에서 체크섬을 실행하는 명령은 다음과 같습니다.
echo "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh" | sha256sum -c
sha256sum
하지만 명령과 함께 사용하고 싶습니다첫 번째. 따라서 우리는 heredoc을 사용하여 다음을 달성합니다.
sha256sum -c << EOF
85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh
EOF
하지만 이제 모든 내용을 한 줄로 작성하고 싶습니다. 그래서 다음과 같이 시도합니다.
sha256sum -c << EOF ; 85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh ; EOF
그러나 이것은 작동하지 않습니다. 하지만해서는 안 된다세미콜론이 ;
"다른 명령을 실행하고 싶습니다"를 의미한다면 작동할까요?
이 순서대로 가져오되 다른 방식으로 한 줄에 쓸 수 있나요? 그렇지 않다면 왜 각 줄에서 무엇을 해야 하는지 알려줄 수 없지만, 한 줄에서는 무엇을 해야 하는지 알려줄 수는 없는 걸까요?
답변1
하지만 세미콜론이 작동하면 안 되나요? "다른 명령을 실행하고 싶다"는 뜻인가요?
아니요, 정확히 말하면 ;
"다른 명령을 실행하겠습니다"라는 의미인데 단일 명령 중간에 삽입하기 때문입니다. 귀하의 명령은 다음과 같습니다
sha256sum -c << EOF
85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh
EOF
많이는 아니고 주문이에요. 세미콜론으로 구분할 수 없으며 여기 문서가 작동하는 방식은 별도의 줄을 가정하므로 한 줄로 작성할 수 없습니다. 그러나 일부 쉘(예 bash
:여기 문자열이 있습니다이것이 당신이 찾고 있는 것일 수도 있습니다:
sha256sum -c <<< "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh"
여기서 문자열은 문자열을 명령(또는 파일 설명자, 그러나 신경쓰지 마세요)에 대한 입력으로 전달하는 빠른 방법일 뿐입니다. 위의 내용은 동일하다고 생각하시면 됩니다
printf '%s\n' "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh" | sha256sum
답변2
코드를 이식 가능하게 유지할 수 있습니다.그리고sha256sum
다음과 같이 명령을 왼쪽 열(이전은 아님 echo
) 로 이동합니다 .
echo "85762db0edc00ce19a2cd5496d1627903e6198ad850bbbdefb2ceaa46bd20cbd install.sh" \
| sha256sum -c
sha256sum
이는 오른쪽으로 나가는 가독성 문제를 해결합니다 echo
. 이 코드를 사용하는 사람들은 이제 다음을 볼 수 있습니다.
답변3
세미콜론과 줄바꿈은 단일 명령의 끝과 같은 일부 위치에서 서로 바꿔 사용할 수 있습니다. 하지만 상황은 확실히 장소마다 다릅니다.
따라서 이것들은 동일합니다:
echo one
echo two
# and
echo one; echo two;
그러나 다음 작업은 수행됩니다.
if true; then
echo hi
fi
echo foo |
wc
이것들은 다음이 아닙니다:
if true; then; echo hi; fi
echo foo |; wc
여기 문서는 좀 더 특별합니다. 라인 단위로 작업합니다.쉘 외부의 문법 구조.
이는 다음을 수행할 수 있음을 의미합니다.
# semicolon and another command before the here-doc
cat <<EOF; echo there
hello
EOF
# pipeline continues past the here-doc
cat <<EOF |
hello
EOF
sed -e 's/$/ there/'
# multiple here-docs used on the same line
cat <<THIS; cat <<THAT
hello
THIS
there
THAT
따라서 명령줄
sha256sum -c << EOF ; 8576... install.sh ; EOF
쉘이 로 끝나는 here 문서를 기다리게 END
한 다음 here 문서를 입력으로 사용하여 sha256sum
명령을 실행 8576...
합니다 EOF
. 후자의 경우 "명령을 찾을 수 없음" 오류가 발생할 수 있습니다.
~처럼테든은 답장에서 이렇게 말했습니다., here-string은 here-doc의 한 줄 버전으로, 대부분의 기능이 풍부한 쉘에서 잘 작동하지만 표준 쉘 언어(예: Debian의 Dash 및 Busybox의 sh)로 더 엄격하게 제한된 쉘에서는 작동하지 않습니다.
sha256sum -c <<< "8576... install.sh"