如何在Bash中将netcat接收的数据拼接为字符串变量用于邮件发送?
问题描述
我希望通过netcat从指定端口收集数据,将其传递给另一个脚本并通过邮件发送。最初使用xargs管道时,出现了每行数据单独发送的问题。现在我想在连接期间将数据拼接成一个字符串,再传递给邮件发送脚本,但尝试的代码无法实现拼接效果,代码如下:
now = '' nc -lvp 12345 | $now=$now$1 ./ForwardMail.sh $now
请问有人能帮我实现字符串拼接吗?
解决方法
提供两种可靠的实现方式,满足你的字符串拼接需求:
方式一:一次性收集所有输出
直接用命令替换把netcat的全部输出存入变量,适合不需要逐行处理的场景:
# 收集nc的所有输出到变量now now=$(nc -lvp 12345) # 传递给邮件脚本,注意加双引号避免空格/特殊字符导致内容拆分 ./ForwardMail.sh "$now"
方式二:逐行自定义拼接
如果需要对每行内容做处理后再拼接(比如去掉换行、添加分隔符),可以用read循环:
now='' # 读取nc的每一行输出,拼接到变量中 while IFS= read -r line; do now+="$line" # 如需保留换行,改为 now+="$line"$'\n' # 如需添加分隔符(比如逗号),改为 now+="$line," done < <(nc -lvp 12345) ./ForwardMail.sh "$now"
原代码的问题说明
- 变量赋值语法错误:
now = ''不能有空格,正确写法是now='' - 管道使用错误:管道是将前一个命令的输出作为后一个命令的输入,而
$now=$now$1不是合法的命令,且$1在此处没有定义,无法获取有效内容。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

