我们的办公室遇到了一些 DNS 问题,因此我尝试通过 IP 地址查找我们的一些服务器:
for i in `seq 14 15`; do echo "10.10.10.$i" ; wget "10.10.10.$i" ; done
期望使用 10.10.10.14 和 10.10.10.15 调用 wget
相反,wget 是用10.10.10.(some weird string which appears to be the expansion of $PS1)
、10.10.10.$
、10.10.10.for
等调用的。
如果我这样做
for i in `seq 14 15`; do echo "10.10.10.$i" ; done
那么结果似乎符合预期:
10.10.10.14
10.10.10.15
然而,这是一种错觉:
$ for i in `seq 14 15` ; do echo $i ; done | hexdump -C
00000000 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 |.]0;CS!@:/tmp $ |
00000010 66 6f 72 20 69 20 69 6e 20 60 73 65 71 20 31 34 |for i in `seq 14|
00000020 20 31 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 | 15` ; do echo |
00000030 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 |$i ; done | hexd|
00000040 75 6d 70 20 2d 43 07 1b 5d 30 3b 43 53 21 40 3a |ump -C..]0;CS!@:|
00000050 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 |/tmp $ for i in |
00000060 60 73 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f |`seq 14 15` ; do|
00000070 20 65 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 | echo $i ; done|
00000080 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 07 1b 5d | | hexdump -C..]|
00000090 30 3b 43 53 21 40 3a 2f 74 6d 70 0a 1b 5d 30 3b |0;CS!@:/tmp..]0;|
000000a0 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 |CS!@:/tmp $ for |
000000b0 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 |i in `seq 14 15`|
000000c0 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b | ; do echo $i ;|
000000d0 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 | done | hexdump |
000000e0 2d 43 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 |-C..]0;CS!@:/tmp|
000000f0 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 65 71 | $ for i in `seq|
00000100 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 63 68 | 14 15` ; do ech|
00000110 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 |o $i ; done | h|
00000120 65 78 64 75 6d 70 20 2d 43 07 24 0a 1b 5d 30 3b |exdump -C.$..]0;|
00000130 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 |CS!@:/tmp $ for |
00000140 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 |i in `seq 14 15`|
00000150 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b | ; do echo $i ;|
00000160 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 | done | hexdump |
00000170 2d 43 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 |-C..]0;CS!@:/tmp|
00000180 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 65 71 | $ for i in `seq|
00000190 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 63 68 | 14 15` ; do ech|
000001a0 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 |o $i ; done | h|
000001b0 65 78 64 75 6d 70 20 2d 43 07 66 6f 72 0a 1b 5d |exdump -C.for..]|
000001c0 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f |0;CS!@:/tmp $ fo|
000001d0 72 20 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 |r i in `seq 14 1|
000001e0 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 |5` ; do echo $i|
000001f0 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d | ; done | hexdum|
00000200 70 20 2d 43 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 |p -C..]0;CS!@:/t|
00000210 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 |mp $ for i in `s|
00000220 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 |eq 14 15` ; do e|
00000230 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c |cho $i ; done ||
00000240 20 68 65 78 64 75 6d 70 20 2d 43 07 69 0a 1b 5d | hexdump -C.i..]|
00000250 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f |0;CS!@:/tmp $ fo|
00000260 72 20 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 |r i in `seq 14 1|
00000270 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 |5` ; do echo $i|
00000280 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d | ; done | hexdum|
00000290 70 20 2d 43 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 |p -C..]0;CS!@:/t|
000002a0 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 |mp $ for i in `s|
000002b0 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 |eq 14 15` ; do e|
000002c0 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c |cho $i ; done ||
000002d0 20 68 65 78 64 75 6d 70 20 2d 43 07 69 6e 0a 1b | hexdump -C.in..|
000002e0 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 |]0;CS!@:/tmp $ f|
000002f0 6f 72 20 69 20 69 6e 20 60 73 65 71 20 31 34 20 |or i in `seq 14 |
00000300 31 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 |15` ; do echo $|
00000310 69 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 |i ; done | hexdu|
00000320 6d 70 20 2d 43 07 1b 5d 30 3b 43 53 21 40 3a 2f |mp -C..]0;CS!@:/|
00000330 74 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 |tmp $ for i in `|
00000340 73 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 |seq 14 15` ; do |
00000350 65 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 |echo $i ; done |
00000360 7c 20 68 65 78 64 75 6d 70 20 2d 43 07 60 73 65 || hexdump -C.`se|
00000370 71 0a 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 20 |q..]0;CS!@:/tmp |
00000380 24 20 66 6f 72 20 69 20 69 6e 20 60 73 65 71 20 |$ for i in `seq |
00000390 31 34 20 31 35 60 20 3b 20 64 6f 20 65 63 68 6f |14 15` ; do echo|
000003a0 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 65 | $i ; done | he|
000003b0 78 64 75 6d 70 20 2d 43 07 1b 5d 30 3b 43 53 21 |xdump -C..]0;CS!|
000003c0 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 69 |@:/tmp $ for i i|
000003d0 6e 20 60 73 65 71 20 31 34 20 31 35 60 20 3b 20 |n `seq 14 15` ; |
000003e0 64 6f 20 65 63 68 6f 20 20 24 69 20 3b 20 64 6f |do echo $i ; do|
000003f0 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 07 |ne | hexdump -C.|
00000400 31 34 0a 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 |14..]0;CS!@:/tmp|
00000410 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 65 71 | $ for i in `seq|
00000420 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 63 68 | 14 15` ; do ech|
00000430 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 |o $i ; done | h|
00000440 65 78 64 75 6d 70 20 2d 43 07 1b 5d 30 3b 43 53 |exdump -C..]0;CS|
00000450 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 |!@:/tmp $ for i |
00000460 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 20 3b |in `seq 14 15` ;|
00000470 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b 20 64 | do echo $i ; d|
00000480 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 |one | hexdump -C|
00000490 07 31 35 60 0a 1b 5d 30 3b 43 53 21 40 3a 2f 74 |.15`..]0;CS!@:/t|
000004a0 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 |mp $ for i in `s|
000004b0 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 |eq 14 15` ; do e|
000004c0 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c |cho $i ; done ||
000004d0 20 68 65 78 64 75 6d 70 20 2d 43 07 1b 5d 30 3b | hexdump -C..]0;|
000004e0 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 |CS!@:/tmp $ for |
000004f0 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 |i in `seq 14 15`|
00000500 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b | ; do echo $i ;|
00000510 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 | done | hexdump |
00000520 2d 43 07 3b 0a 1b 5d 30 3b 43 53 21 40 3a 2f 74 |-C.;..]0;CS!@:/t|
00000530 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 |mp $ for i in `s|
00000540 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 |eq 14 15` ; do e|
00000550 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c |cho $i ; done ||
00000560 20 68 65 78 64 75 6d 70 20 2d 43 07 1b 5d 30 3b | hexdump -C..]0;|
00000570 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 |CS!@:/tmp $ for |
00000580 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 |i in `seq 14 15`|
00000590 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b | ; do echo $i ;|
000005a0 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 | done | hexdump |
000005b0 2d 43 07 64 6f 0a 1b 5d 30 3b 43 53 21 40 3a 2f |-C.do..]0;CS!@:/|
000005c0 74 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 |tmp $ for i in `|
000005d0 73 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 |seq 14 15` ; do |
000005e0 65 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 |echo $i ; done |
000005f0 7c 20 68 65 78 64 75 6d 70 20 2d 43 07 1b 5d 30 || hexdump -C..]0|
00000600 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 |;CS!@:/tmp $ for|
00000610 20 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 35 | i in `seq 14 15|
00000620 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 20 |` ; do echo $i |
00000630 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 |; done | hexdump|
00000640 20 2d 43 07 65 63 68 6f 0a 1b 5d 30 3b 43 53 21 | -C.echo..]0;CS!|
00000650 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 69 |@:/tmp $ for i i|
00000660 6e 20 60 73 65 71 20 31 34 20 31 35 60 20 3b 20 |n `seq 14 15` ; |
00000670 64 6f 20 65 63 68 6f 20 20 24 69 20 3b 20 64 6f |do echo $i ; do|
00000680 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 07 |ne | hexdump -C.|
00000690 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 |.]0;CS!@:/tmp $ |
000006a0 66 6f 72 20 69 20 69 6e 20 60 73 65 71 20 31 34 |for i in `seq 14|
000006b0 20 31 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 | 15` ; do echo |
000006c0 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 |$i ; done | hexd|
000006d0 75 6d 70 20 2d 43 07 24 69 0a 1b 5d 30 3b 43 53 |ump -C.$i..]0;CS|
000006e0 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 |!@:/tmp $ for i |
000006f0 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 20 3b |in `seq 14 15` ;|
00000700 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b 20 64 | do echo $i ; d|
00000710 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 |one | hexdump -C|
00000720 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 |..]0;CS!@:/tmp $|
00000730 20 66 6f 72 20 69 20 69 6e 20 60 73 65 71 20 31 | for i in `seq 1|
00000740 34 20 31 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 |4 15` ; do echo |
00000750 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 | $i ; done | hex|
00000760 64 75 6d 70 20 2d 43 07 3b 0a 1b 5d 30 3b 43 53 |dump -C.;..]0;CS|
00000770 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 |!@:/tmp $ for i |
00000780 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 20 3b |in `seq 14 15` ;|
00000790 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b 20 64 | do echo $i ; d|
000007a0 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 |one | hexdump -C|
000007b0 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 |..]0;CS!@:/tmp $|
000007c0 20 66 6f 72 20 69 20 69 6e 20 60 73 65 71 20 31 | for i in `seq 1|
000007d0 34 20 31 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 |4 15` ; do echo |
000007e0 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 | $i ; done | hex|
000007f0 64 75 6d 70 20 2d 43 07 64 6f 6e 65 0a 1b 5d 30 |dump -C.done..]0|
00000800 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 |;CS!@:/tmp $ for|
00000810 20 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 35 | i in `seq 14 15|
00000820 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 20 |` ; do echo $i |
00000830 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 |; done | hexdump|
00000840 20 2d 43 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d | -C..]0;CS!@:/tm|
00000850 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 65 |p $ for i in `se|
00000860 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 63 |q 14 15` ; do ec|
00000870 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 |ho $i ; done | |
00000880 68 65 78 64 75 6d 70 20 2d 43 07 7c 0a 1b 5d 30 |hexdump -C.|..]0|
00000890 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 |;CS!@:/tmp $ for|
000008a0 20 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 35 | i in `seq 14 15|
000008b0 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 20 |` ; do echo $i |
000008c0 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 |; done | hexdump|
000008d0 20 2d 43 07 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d | -C..]0;CS!@:/tm|
000008e0 70 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 65 |p $ for i in `se|
000008f0 71 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 63 |q 14 15` ; do ec|
00000900 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 |ho $i ; done | |
00000910 68 65 78 64 75 6d 70 20 2d 43 07 68 65 78 64 75 |hexdump -C.hexdu|
00000920 6d 70 0a 1b 5d 30 3b 43 53 21 40 3a 2f 74 6d 70 |mp..]0;CS!@:/tmp|
00000930 20 24 20 66 6f 72 20 69 20 69 6e 20 60 73 65 71 | $ for i in `seq|
00000940 20 31 34 20 31 35 60 20 3b 20 64 6f 20 65 63 68 | 14 15` ; do ech|
00000950 6f 20 20 24 69 20 3b 20 64 6f 6e 65 20 7c 20 68 |o $i ; done | h|
00000960 65 78 64 75 6d 70 20 2d 43 07 1b 5d 30 3b 43 53 |exdump -C..]0;CS|
00000970 21 40 3a 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 |!@:/tmp $ for i |
00000980 69 6e 20 60 73 65 71 20 31 34 20 31 35 60 20 3b |in `seq 14 15` ;|
00000990 20 64 6f 20 65 63 68 6f 20 20 24 69 20 3b 20 64 | do echo $i ; d|
000009a0 6f 6e 65 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 |one | hexdump -C|
000009b0 07 2d 43 07 31 34 0a 1b 5d 30 3b 43 53 21 40 3a |.-C.14..]0;CS!@:|
000009c0 2f 74 6d 70 20 24 20 66 6f 72 20 69 20 69 6e 20 |/tmp $ for i in |
000009d0 60 73 65 71 20 31 34 20 31 35 60 20 3b 20 64 6f |`seq 14 15` ; do|
000009e0 20 65 63 68 6f 20 20 24 69 20 3b 20 64 6f 6e 65 | echo $i ; done|
000009f0 20 7c 20 68 65 78 64 75 6d 70 20 2d 43 07 1b 5d | | hexdump -C..]|
00000a00 30 3b 43 53 21 40 3a 2f 74 6d 70 20 24 20 66 6f |0;CS!@:/tmp $ fo|
00000a10 72 20 69 20 69 6e 20 60 73 65 71 20 31 34 20 31 |r i in `seq 14 1|
00000a20 35 60 20 3b 20 64 6f 20 65 63 68 6f 20 20 24 69 |5` ; do echo $i|
00000a30 20 3b 20 64 6f 6e 65 20 7c 20 68 65 78 64 75 6d | ; done | hexdum|
00000a40 70 20 2d 43 07 31 35 0a |p -C.15.|
输出是相同的
for i in $(seq 14 15) ; do echo $i ; done | hexdump -C
所以看来使用反引号本身并不是问题。
我究竟做错了什么?
答案1
如你的所示:
$ trap -p DEBUG
trap -- 'preexec_invoke_exec' DEBUG
您有一个DEBUG
在每个命令之前运行命令的陷阱。从外观上看,该preexec_invoke_exec
命令(最终)似乎尝试使用正在运行的命令来更新终端模拟器的标题。
但是,为此,它将转义序列写入 stdout 而不是终端。
您应该确定它在哪里执行此操作并添加> /dev/tty
重定向以确保它始终发送到 tty 设备,即使 stdout 像在该$(...)
命令替换中一样被重定向。
另请注意,如果这preexec_invoke_exec
意味着模拟zsh
s preexec
,那么它会做错事,因为preexec
挂钩 inzsh
只意味着在接受命令行之后和运行之前执行一次,而不是针对该命令行中的每个命令执行一次。