사용자 입력 시 터미널 정지에 여러 명령 붙여넣기

사용자 입력 시 터미널 정지에 여러 명령 붙여넣기

일부 연속 명령을 터미널에 붙여넣으면 사용자가 입력한 명령에서 중지됩니다. 예:

read VAR
echo $VAR

또는

select VAR in 1 2 3; do break; done
echo $VAR

echo $VAR붙여넣기/실행되지 않았습니다.

그러나 모든 명령을 한 줄에 입력하면 작동합니다.

read VAR; echo $VAR

그러나 더 많은 명령이 뒤따를 때 이것은 첫 번째 선택이 아닙니다.


왜 이런 일이 발생하며 어떻게 해결합니까?

내 사용 사례는 서비스 문서에 반복되는 명령이 있는 것입니다.
확실히 스크립트를 작성할 수는 있지만 그렇게 하려는 것은 아니며 읽기 전용 액세스 권한이 있는 시스템에서는 불가능할 수도 있습니다.

답변1

매우 편안한 방법은 다음과 같습니다:

터미널에 다음을 입력하면 됩니다.

( paste-your-multiline-script-here ) enter

자세한 설명:

  1. 터미널에서 시작합니다.(

    선택사항: 누르기 enter(형식 지정을 위한 경우에만)

  2. 이제 여러 줄을 붙여넣을 수 있습니다

    예를 들어:
    echo hello
    echo world

    대안: 한 줄씩 입력/붙여넣기( enter각 줄을 키로 완성).

  3. 마지막으로 terminator를 입력 )하고 다시 클릭하면 붙여 enter넣거나 입력한 줄 전체가 실행됩니다.

작은 작업 예(한 줄씩 붙여넣기용 enter):

anderson@tp ~ % (
\`subsh> echo hello
\`subsh> echo world
\`subsh> )
hello
world
anderson@tp ~ % 

작은 작업 예(전체 스크립트 붙여넣기용):

anderson@tp ~ % (
\`subsh> echo hello
echo world
\`subsh> )
hello
world
anderson@tp ~ %

서식을 무시하는 작은 작업 예(전체 스크립트 붙여넣기용):

anderson@tp ~ % (echo hello                                                
echo world)
hello
world
anderson@tp ~ % 

답변2

다음 두 명령을 셸에 붙여넣을 때:

read VAR
echo $VAR

...첫 번째는 쉘에게 텍스트 줄을 변수라는 이름으로 읽도록 지시합니다 VAR. 다음 줄에 값을 제공하면 실행될 것으로 생각되는 명령이 됩니다.

변수 값을 인쇄하면 VAR다음이 표시됩니다.

$ printf '%s\n' "$VAR"
echo $VAR

메뉴에서도 같은 일이 발생합니다 select.

문서/명령이 사용자로부터 값을 기대하는 경우 다음과 같은 주석을 삽입하는 것이 좋습니다.

read VAR

(사용자가 값을 입력함)

echo $VAR

답변3

\복사하기 전에 각 줄의 끝에 배치하면 됩니다.

답변4

원하는 대로 이 작업을 수행할 수 있습니다. 나는 항상 이것을 한다.

zsh와 특수 이스케이프 시퀀스(예: urxvt)로 붙여넣기를 래핑하는 터미널을 사용하는 경우 기본적으로 이미 원하는 방식으로 작동합니다. bash를 사용하는 경우 간단히 실행하여 붙여넣기 괄호 해석을 활성화할 수 있습니다 bind 'set enable-bracketed-paste on'. 그런 다음 붙여넣은 내용을 실행하기 전에 Enter 키를 누를 때까지 기다립니다. 이와 관련하여 bash와 zsh의 차이점은 bash는 붙여넣은 명령을 기록에 분리하므로 2줄의 경우 Up, Up, Enter, Up, Up, Enter를 눌러야 하고 zsh는 붙여넣은 명령을 Go로 유지한다는 것입니다. 히스토리에는 몇 줄이 있어도 위로 들어가세요.

자세한 내용은 아래 답변에 기록되어 있습니다. 두 번째는 내 것이고 브래킷 붙여넣기를 지원하는 터미널 테이블이 포함되어 있습니다. urxvt를 사용하게 되면 질문에서 다루는 취약점을 피하기 위해 답변에 포함된 확장 프로그램을 설치하는 것이 좋습니다.

https://security.stackexchange.com/a/52655/132634

https://security.stackexchange.com/a/184112/132634

편집: 그런데, 놓친 경우를 대비해 좀 더 명확하게 설명하자면, 이렇게 하지 않으면(괄호로 붙여넣기) 웹사이트에서 붙여넣을 때 쉘 코드 삽입이 가능해집니다. 결국 웹사이트에서는 다양한 방법으로 코드를 숨길 수 있으며 사용자가 모르는 사이에 코드를 복사할 수 있습니다.

귀하가 취약한지 알아보려면 다음 웹사이트를 확인하십시오.

http://thejh.net/misc/website-terminal-copy-paste

다음을 실행하는 것처럼 보입니다.

git clone git://git.kernel.org/pub/scm/utils/kup/kup.git

효과적으로 다음과 같이 실행할 수 있습니다(인쇄할 수 없는 이스케이프 바이트를 제거했습니다).

git clone [201~/dev/null; clear; echo -n "Hello ";whoami|tr -d '\n';echo -e '!\nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust!
Here'"'"'s the first line of your /etc/passwd: ';head -n1 /etc/passwd
git clone git://git.kernel.org/pub/scm/utils/kup/kup.git 

관련 정보