for 루프의 단어로 인한 백틱으로 인해 이상한 동작이 발생함

for 루프의 단어로 인한 백틱으로 인해 이상한 동작이 발생함

우리 사무실에 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/ttystdout이 리디렉션되는 경우에도 항상 tty 장치로 전송되도록 리디렉션을 추가해야 합니다.$(...)

또한 이것이 s preexec_invoke_exec시뮬레이션을 의미한다면 후킹은 명령줄이 승인된 후 실행되기 전에 한 번만 실행되어야 하고 해당 명령줄의 각 명령에 대해 한 번만 실행되는 것이 아니기 때문에 잘못된 작업을 수행한다는 점에 유의하십시오.zshpreexecpreexeczsh

관련 정보