在 ZSH + MacOS 上无法读取超过 1024 个字符

在 ZSH + MacOS 上无法读取超过 1024 个字符

尝试从 MacOS 上的 ZSH 读取长输入到变量中。

    echo "URL: "
    read URL

输入总是被截断为 1024 个字符...如果我尝试输入其他字符,则什么也不会发生。

  • 输入是从 PostMan 复制/粘贴的,它是一个 S3 签名的上传 URL

  • 如果我尝试从末尾删除一些字符(粘贴后),我只能手动键入删除的字符数

  • 我尝试使用该-n选项无济于事(没有任何内容被读入变量)

如何读取长输入? 〜1500 个字符

答案1

read它本身只是从终端读取字节,它无法控制终端如何读取这些字节。而且终端的线路长度有限,据我记得,不能轻易更改(或根本无法更改?)。终端的行编辑器也很简陋,只支持退格键,不支持其他编辑命令。

使用vared相反。这有点类似于read(但选项不同),但它专门用于从终端读取,并使用 zsh 的行编辑器。这使得它更加用户友好,而且没有行长度限制。

URL=
vared -p "URL: " URL

vared始终从终端读取,而不是从标准输入读取。如果要支持读取从文件或管道重定向的输入,请检查标准输入是否是带有以下命令的终端-t 状况..

URL=
if [[ -t 0 ]]; then
  vared -p "URL: " URL
else
  read -r URL
fi

相关内容