내가 백 슬래시를 누를 때 \, 나는 주어진있어 >
기호 (이상)을. 이것은 무엇을 의미 하는가?
내가 백 슬래시를 누를 때 \, 나는 주어진있어 >
기호 (이상)을. 이것은 무엇을 의미 하는가?
답변:
명령 행을 사용할 때마다 매우 긴 명령을 실행해야 할 경우가있을 수 있습니다. 따라서 가독성과 이해를 돕기 위해 명령을 여러 줄로 나누려고합니다. 그러나로 입력하는 줄 바꿈 문자를 사용 Enter하면 쉘은 그것이 새로운 명령이라고 생각할 것입니다. 따라서 \
줄 바꿈 문자가 뒤 따릅니다.
기본적으로 명령 또는 bash 스크립트는 "해석"됩니다. 모든 새로운 줄은 새로운 명령의 시작을 의미합니다. 터미널에서을 누르면 Enter새 명령을 실행하라는 메시지가 표시됩니다. 따라서 새로운 줄은 "탈출"되어야합니다. 타이핑 \
다음에 Enter현재 명령을 여러 줄로 나누면 쉘이 새로운 명령이라고 생각하지 않고 이전 명령의 연속이라고 생각합니다.
>
입력되는 명령의 다음 줄에 대한 프롬프트 일뿐입니다.
예를 들어 :
여러 패키지를 설치하려는 경우 명령은 다음과 같습니다.
$ sudo apt install [package1] [package2] [package3] ...
그러나 때로는 명령이 복잡해집니다. 우리가 사용할 수 있도록 \
다음 Enter(개행 문자)
$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...
$PS1
및 $PS2
변수. bash 매뉴얼 페이지에서 형식을 배우고 echo "'$PS2'"
현재 설정을 보는 데 사용 하십시오.
[다른 2는 "너무 길고 복잡한"답변을 추가하는 것은 ">"가 어떻게 나타나는지 언급하지 않습니다. 즉, PS2는 언급하지 않습니다.]
\Enter다음과 \같이 입력했습니다 : :는 쉘에 명령을 평소와 같이 해석 하지 않고 리터럴 문자로 출력 합니다 (따라서 쉘은 현재 명령 행을 종료하고 해석하는 대신 "다음 행으로 이동"합니다). heredoc, for 루프 등과 같은 다른 구문).Enter
따라서 터미널은 \Enter"다음 줄로 이동"(명령 해석을 시작하지 않고)으로 해석되므로 이제 터미널에서 여러 줄 명령의 두 번째 줄을 입력하여 $PS2
내용을 더 잘 보이게 할 수 있습니다 ( 다음 줄마다 PS2 프롬프트 라고합니다 .
PS2의 변수는 보통 기본적으로 다음과 같이 정의된다 PS2="> "
exemple를 위해 당신이 할 수있는 및 편집하여 ~ / .bashrc에 당신이 (고려 원하는대로 다시 정의하는 방법은, IMO, 피하고 같은 위험한 문자를 포함해야한다는 >
이상을 ;
, 그리고 당신을 도움이 될 것입니다 하나 명확하게 여러 줄의 명령입니다 볼 수 있지만 그것의 여러 컨텐츠를 비활성화합니다 (예 : PS2="#cont#"
) 가능한 한 라인에 거의 영향으로 그들을 또는 당신은 쉽게 복사 할 수 / 붙여 넣기 (예 : PS2=" "
)
그건 그렇고, 어떤 경우에는 중요한 바이너리 명령을 삭제하도록 유도 할 수 있기 때문에 imo가 나쁜 기본값입니다.
다음을 두려워하지 않고 여러 줄 명령을 쉽게 복사 / 붙여 넣을 수 있도록 PS2를 다른 것으로 정의 할 수 있습니다 (예 : PS2 = "").
예를 들어 꽤 길기 시작하는 명령이 있다고 가정 해 봅시다 (터미널이 충분하지 않으면 화면에서 접힐 수 있습니다).
grep -i "something" /some/file /another/file /3rd/file /etc/someimportantfile
명령이 너무 길어 보인다면 (다음으로 감싸는 경우) \Enter적절한 위치에 다음을 삽입하여 다음 행에서 원하는 위치를 선택하여 시각적으로 두 줄로 나눌 수 있습니다 .
grep -i "something" /some/file /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !
기본 PS2를 사용하여 쉘은 "/"/ etc / someimportantfile "앞에"> "를 추가했습니다. 따라서 다른 터미널에서이 두 줄을 복사 / 붙여 넣기하면 동작이 완전히 달라집니다. 4 개의 파일로 grepping하는 대신 grep은 처음 3 개 파일 만 들어가고 grep 출력 은 4 번째 파일 (/ etc / someimportantfile)의 내용을 대체합니다!
이러한 문제 (및 기타 여러 가지)를 피하려면 다음과 같이 정의하십시오. PS2=" "
여러 줄 명령을보다 깨끗하고 복사 / 붙여 넣기 쉽게 만들 수 있습니다.
grep -i "something" /some/file /another/file /3rd/file \
/etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!
이번에는 / bin / somecommand가 오른쪽으로 2 칸 이동하고 ">"가 삽입되지 않았으므로이 2 줄 명령을 안전하게 복사 / 붙여 넣을 수 있습니다.
PS2는 또한 "for" "while"등의 루프에서 사용되며, ""로 정의 된 것이 나에게도 더 좋습니다.