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

sudo与stdbuf位置差异及Shell重定向作用范围技术咨询

Bash重定向与命令解析相关问题

问题背景

运行以下命令时发现部分日志丢失:

root@janux-spr1:/home/tw12/redis_research/dpdk-framework/dpdk-rx# { sudo ./dpdk-rx -l 3-5 -a 0000:18:00.1 -- -m 0 -d 0 -l 1 -i 500; } &> test.log; cat test.log

输出结果:

EAL: Detected CPU lcores: 32
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Probe PCI driver: mlx5_pci (15b3:101b) device: 0000:18:00.1 (socket 0)
mlx5_common: DevX read access NIC register=0X9055 failed errno=121 status=0x3 syndrome=0x54e3a9
TELEMETRY: No legacy callbacks, legacy socket not created
Floating point exception

推测是缓冲问题,添加stdbuf -o0关闭stdout缓冲后,发现stdbuf的位置会影响结果,只有第二种写法能输出完整日志:

第一种写法(日志仍不完整)

root@janux-spr1:/home/tw12/redis_research/dpdk-framework/dpdk-rx# { stdbuf -o0 sudo ./dpdk-rx -l 3-5 -a 0000:18:00.1 -- -m 0 -d 0 -l 1 -i 500; } &> test.log; cat test.log

输出:

EAL: Detected CPU lcores: 32
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Probe PCI driver: mlx5_pci (15b3:101b) device: 0000:18:00.1 (socket 0)
mlx5_common: DevX read access NIC register=0X9055 failed errno=121 status=0x3 syndrome=0x54e3a9
TELEMETRY: No legacy callbacks, legacy socket not created
Floating point exception

第二种写法(日志完整)

root@janux-spr1:/home/tw12/redis_research/dpdk-framework/dpdk-rx# { sudo stdbuf -o0 ./dpdk-rx -l 3-5 -a 0000:18:00.1 -- -m 0 -d 0 -l 1 -i 500; } &> test.log; cat test.log

输出:

EAL: Detected CPU lcores: 32
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Probe PCI driver: mlx5_pci (15b3:101b) device: 0000:18:00.1 (socket 0)
mlx5_common: DevX read access NIC register=0X9055 failed errno=121 status=0x3 syndrome=0x54e3a9
TELEMETRY: No legacy callbacks, legacy socket not created
5 EAL arguments used
0 application arguments used
================ Configuration ================
Port:           0
Interval:       500 msec
Packet Rate:    N/A (no rate limiting)
===============================================
RX lcore count: 3
Allocated mbuf pool size 71303168B
Init port 0
PCI address: 0000:18:00.1
Set up 2 TX rings (4096 descriptors per ring)
Set up 2 RX rings (4096 descriptors per ring)
Port 0 MAC: b8 3f d2 59 5f e1
CPU running in 2000 MHz, printing interval is 500ms -- 1000000000 cycles
Starting RX Threads -- Main thread NOT treats as RX thread
lcore  4 (lcore index  1, RX index  0) starts to receive packets
lcore  5 (lcore index  2, RX index  1) starts to receive packets
Floating point exception

通用问题

  1. 重定向的作用范围是什么?重定向和缓冲设置仅作用于所附加的特定命令吗?如果是,那么对于包含多个子命令的组合(如sudo time XXX或bash -c '')情况如何?
  2. 对于sudo time XXX > logfile,重定向的是XXX还是整个sudo time XXX?类似的,command1 && command2 > logfile && command3、{command1 && command2} > logfile等场景的重定向规则是什么?

命令解析学习资源

已查阅过单词拆分相关资料,但仍不清楚Bash如何判断某个词是独立命令还是前一个命令的参数,哪里可以系统学习这些知识?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:38:18