Bash를 사용하여 여러 줄을 실행 파일로 보내기

Bash를 사용하여 여러 줄을 실행 파일로 보내기

pwntools따라서 Python에는 실행 파일의 일부로 편의 기능이 있습니다 . sendline()Bash에서 이 기능을 어떻게 에뮬레이션할 수 있나요?

#whatever.py
x = input("First input please: ")
y = input("Second input please: ")

첫 번째 입력에 응답 할 수 있다는 것을 알고 있지만 echo "input1" | python3 whatever.py여러 줄에서 작동하도록 만들 수는 없습니다( echo "input1\ninput2" | ...작동하지 않음, 작동하지 않음 echo "input1"; echo "input2" | ...).

답변1

Python 스크립트에는 표준 입력 스트림에 두 줄의 입력이 필요합니다. 다음 중 하나가 규정됩니다.

  1. echo서브셸에서 두 가지 호출:

    ( echo 'line 1'; echo 'line 1' ) | python3 whatever.py
    
  2. echo복합 명령의 두 호출:

    { echo 'line 1'; echo 'line 1'; } | python3 whatever.py
    
  3. 한 번의 호출은 echo비표준 옵션을 사용하여 포함을 리터럴 줄 바꿈으로 -e해석합니다 .\n

    echo -e 'line 1\nline 2' | python3 whatever.py
    
  4. printf각 후속 인수의 형식을 자체 출력 라인으로 지정하는 단일 호출입니다 . 이는 를 사용하는 것보다 변경 가능한 데이터에 더 적합합니다 echo.왜 printf가 echo보다 나은가요?.

    printf '%s\n' 'line 1' 'line 2' | python3 whatever.py
    
  5. 여기 문서를 사용하여 리디렉션하세요.

    python3 whatever.py <<'END_INPUT'
    line 1
    line 2
    END_INPUT
    

관련 정보