bash가 내 명령을 실행하는 대신 `>`을 표시하는 이유는 무엇입니까?

bash가 내 명령을 실행하는 대신 `>`을 표시하는 이유는 무엇입니까?

Bash가 때때로 내 명령을 거부하고 명령을 실행하는 대신 단순히 보다 큰 기호로 시작하는 새 줄을 시작하는 이유는 무엇입니까? Enter를 누를 때마다 새 줄이 추가되는데, 이를 피하는 유일한 방법은 Ctrl+를 누르는 것 같습니다 C.

적절한 사례: 가끔 노트북의 팬 속도를 제한해야 하는 작은 명령이 더 이상 작동하지 않습니다.

RegenbogenBook:Resources Vincent$ smc -k F0Mx -w $(python -c 'print hex(2800 << 2)[2:]’)
>
>
>

나는 매우 분명한 것을 놓치고 있다는 느낌을 받았지만 이 기본적인 사항은 FAQ에서 다루지 않거나 검색을 통해 접근할 수 없습니다...

답변1

아마도 수동으로 입력하는 대신 문서에서 명령(또는 그 일부)을 잘라내어 붙여넣었을 것입니다. 일반적으로 이는 차이가 없지만 이 경우 두 번째 따옴표 문자는 "아포스트로피"( )가 아닌 "오른쪽 작은따옴표"( ')로 삽입됩니다. 차이점은 미미합니다. 자세한 내용은 이 페이지를 참조하세요.

http://en.wikipedia.org/wiki/Quotation_mark_glyphs

이는 나중에 참조할 수 있도록 문서에 명령을 처음 입력할 때 워드 프로세서가 자동으로 두 번째 아포스트로피를 올바른 작은따옴표로 변환하기 때문에 발생할 수 있습니다. 이는 화면에서 문자를 더 보기 좋게 만들기 위해 수행되지만 bash는 해당 문자를 유효한 닫는 따옴표로 인식하지 못하므로 문제가 발생합니다. >원래 인용문이 아직 닫히지 않았다고 생각하기 때문에 추가 입력을 요청하기 위해 " "를 인쇄합니다.

해결 방법은 문자를 아포스트로피로 변경하는 것입니다. 키보드에서 수동으로 bash에 다시 입력하면 됩니다. 향후 잘라내기+붙여넣기가 올바르게 작동하도록 문서에서 이를 수정할 수도 있습니다.

답변2

당신 이 >보고 있는 것은 쉘이 여전히 입력을 기다리고 있기 때문입니다. Fretantini의 답변에 따르면 귀하는 진술을 올바르게 끝내지 않았습니다.

때로는 보조 입력 프롬프트(Bash에서는 PS2라고 함)가 표시될 수도 있습니다. 예를 들어 일부 대화형 명령은 mailx이를 사용하여 이메일 필드를 채웁니다. +send to shell을 눌러 보조 입력 프롬프트를 끌 수 있습니다 EOF.CtrlD

답변3

마지막 참조는 라운드 참조이므로 Python에 전달하는 문자열은 아직 완전하지 않습니다. 구문 색상 지정의 차이점을 확인할 수 있습니다.

smc -k F0Mx -w $(python -c 'print hex(2800 << 2)[2:]’)

그리고

smc -k F0Mx -w $(python -c 'print hex(2800 << 2)[2:]')

답변4

질문

다른 사람들이 말했듯이 OP python에는 귀하의 진술에 종료되지 않은 문자열이 있습니다. 반올림 따옴표와 작은 따옴표를 혼동하고 있습니다.


예상 사용량

OP가 모른다는 점을 감안할 때레벨 2 팁, OP에서 가져온 예를 보여주고 싶습니다.처음부터 Linux - SystemD가 포함된 버전 7.6책을 읽고 그것이 어떻게 작동하는지 설명하십시오. 대부분의 경우 프롬프트는 다음과 같이 사용됩니다.

cat > version-check.sh << "EOF"
#!/bin/bash
# Simple script to list version numbers of critical development tools

export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
echo "/bin/sh -> `readlink -f /bin/sh`"
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -e /usr/bin/yacc ];
  then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";
  else echo "yacc not found"; fi

bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
if [ -e /usr/bin/awk ];
  then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";
  else echo "awk not found"; fi

gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2-  # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl `perl -V:version`
sed --version | head -n1
tar --version | head -n1
xz --version | head -n1

echo 'main(){}' > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
  then echo "g++ compilation OK";
  else echo "g++ compilation failed"; fi
rm -f dummy.c dummy

EOF

추리

처음부터 널리 사용되는 Linux용 도구는 터미널뿐입니다. 책이 오프호스트 빌드인지 확인하기 위해 책에서는 OP에서 문제가 있다고 간주하는 동작을 사용하여 모든 스크립트와 구성 파일을 입력하도록 지시합니다. 첫 번째 줄은여기 문서version-check.sh완료되면 이름이 표시됩니다. 다음은 완성된 스크립트가 포함된 Cygwin 터미널의 스크린샷입니다.

텍스트 편집기 없이 Cygwin 스크립팅

이 스크립트에는 문서에 공백을 만들고 가독성을 높이는 CR/LF가 포함되어 있습니다. 각 CR/LF는 새 인스턴스를 생성 >하고 마지막에는 EOF모든 >버퍼가 생성됩니다 version-check.sh.

관련 정보