使用 bash 将多行发送到可执行文件

使用 bash 将多行发送到可执行文件

所以Python有一个方便的函数作为可执行文件的pwntools一部分。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子 shell 中的两次调用:

    ( 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
    

相关内容