我有一个 shell 脚本,它从另一个 shell 脚本获取输入。该流通过管道传输到 stdin。
我需要将 stdin 流的所有字节捕获到 shell 脚本中的单个变量中。然后对其执行一些操作,并通过 stdout 将其发送回去。
我遇到的问题是,有时输入文件中有尾随换行符,但有时没有。如果没有,那么我不想添加。但是,如果有尾随换行符,我想保留它。
问题是,无论我尝试什么,系统要么始终输出不带尾随换行符(如 的情况printf
),要么始终输出带有换行符(如 的情况echo
)。
echo
请告诉我一个进程(不是或)的名称是什么,printf
它只接受一个变量并将其逐字逐句地逐字节地通过 stdout 输出。我尝试了所有可能的选项,printf
但没有一个能保留尾随换行符。
谢谢。
答案1
回显-e“$var”将要输出尾随换行符。也许你忘了引号?问这样的问题时,一定要显示你尝试过的内容。
答案2
我最终在代码中使用的解决方案如下:
function filter() {
#do lots of sed operations
#see https://github.com/gistya/expandr for full code
}
GIT_INPUT=`cat; echo x`
FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter)
FILTERED_OUTPUT=${FILTERED_OUTPUT%x}
printf '%s' "$FILTERED_OUTPUT"