You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS下rev与cut管道执行无返回结果问题求助

排查 echo "a_b_c_d_e_f_g" | rev | cut -d_ -f2- 无输出的问题

首先,咱们先明确这个命令的预期行为:正常执行的话应该返回 f_e_d_c_b_a——rev 把原字符串反转成 g_f_e_d_c_b_a,然后 cut 以 _ 为分隔符,提取从第2个字段到末尾的内容。

你说命令始终无返回结果还怀疑有命令在等EOF,那咱们一步步排查:

1. 拆分命令,定位问题环节

先把管道拆开来单独测试,精准定位哪个步骤出了问题:

  • 第一步测试echo:运行 echo "a_b_c_d_e_f_g",确认输出是 a_b_c_d_e_f_g(带换行符)。
  • 第二步测试rev:执行 echo "a_b_c_d_e_f_g" | /usr/bin/rev,正常应该输出 g_f_e_d_c_b_a。如果这一步没输出,那问题肯定出在rev上——要么命令损坏,要么它没收到EOF。
    • 你可以直接运行 /usr/bin/rev,手动输入 a_b_c_d_e_f_g 后按 Ctrl+D(手动发送EOF),如果还是没输出,说明rev命令本身有问题,CentOS里rev属于util-linux包,你可以尝试重新安装:yum reinstall util-linux。
  • 第三步测试cut:如果rev输出正常,那把rev的结果传给cut试试:echo "g_f_e_d_c_b_a" | /usr/bin/cut -d_ -f2-,正常应该输出 f_e_d_c_b_a。如果这一步没输出,检查cut的参数是否正确,或者cut命令是否异常。

2. 排查缓冲或IO问题

GNU命令在管道中默认会用块缓冲,偶尔可能导致输出延迟(看起来像无输出)。你可以强制命令使用行缓冲试试:

echo "a_b_c_d_e_f_g" | stdbuf -oL /usr/bin/rev | stdbuf -oL /usr/bin/cut -d_ -f2-

stdbuf -oL 会让命令每次输出一行就刷新缓冲区,避免因为缓冲导致的无输出假象。

3. 检查输入内容是否有异常

有时候字符串里可能包含不可见字符(比如全角下划线、控制字符),导致cut无法正确识别分隔符。你可以用od命令查看实际输出的字符:

echo "a_b_c_d_e_f_g" | od -c

正常输出应该是类似这样的(全是半角字符和换行):

0000000   a   _   b   _   c   _   d   _   e   _   f   _   g  \n
0000016

如果看到奇怪的字符,那就是输入内容的问题了。

4. 验证cut参数的兼容性

虽然-d_ -f2-是标准写法,但你可以试试更明确的写法,避免参数解析问题:

echo "a_b_c_d_e_f_g" | rev | cut -d '_' -f 2-

给分隔符加引号,参数之间加空格,看是否有变化。

内容的提问来源于stack exchange,提问作者rph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:44:09