我在bash脚本中有一个read
命令,其输入定义了一个数组。输入通常是包含多行的复制/粘贴数据。多行输入中的每一行均已正确捕获,并作为单独的元素添加到数组中,但是我希望在粘贴时在终端窗口中以>
前缀缩进每行。
这适用于在macOS上运行的bash v3。我已经尝试过read
命令的各种形式,但没有发现任何有效的方法。
脚本:
#!/bin/bash
echo "Provide inputs:"
until [[ "$message" = "three" ]]; do
read -p "> " message
myArray+=($message) #Input added to array for later processing
done
手动输入如下:
Provide inputs:
> one
> two
> three
但是复制/粘贴的多行输入看起来像这样:
Provide inputs:
> one
two
three
> >
期望的结果是复制/粘贴的多行输入看起来与手动输入的输入相同。
答案 0 :(得分:0)
听起来问题在于阅读的方式。读回显回击击键,我认为也许是因为有stdout缓冲区,在刷新回显语句之前它是写的。
使用echo命令和-e
参数的组合来读取(交互式)可在我的测试中解决此问题。
#!/bin/bash
echo "Provide inputs:"
until [[ "$message" = "three" ]]; do
echo -ne "> "
read -e message
myArray+=($message) #Input added to array for later processing
done
答案 1 :(得分:0)
(在解释了OP的要求后,答案发生了变化)
当逐行输入以及删除>
时复制粘贴多行之后输入时,屏幕看起来是相同的(鉴于特殊字符,我添加了-r
)。 / p>
until [[ "$message" = "three" ]]; do
read -r message
myArray+=("$message")
done
当您想看到>
时,可以使用丑陋的
printf "> "
until [[ "$message" = "three" ]]; do
read -rs message
printf "%s\n> " "${message}"
myArray+=("$message")
done
在这种情况下,输入仅显示在Enter
之后,因此看起来更糟。