summaryrefslogtreecommitdiff
path: root/nvim/undo/%home%coast%Projects%ns%src%shell.c
blob: 52a1a7bed241a14a496f70c1590db5b8e1e07ac2 (plain)
ofshex dumpascii
0000 56 69 6d 9f 55 6e 44 6f e5 00 03 c9 0a 98 ba 1f 07 d7 ad af 4d 4a f4 5c 16 9f fb a0 c7 6a d0 d7 Vim.UnDo............MJ.\.....j..
0020 f8 4c a7 8e e2 ea 2b c7 2e 3f bf 00 00 00 58 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 .L....+..?....X.................
0040 00 00 13 00 00 00 00 00 00 00 13 00 00 00 13 00 00 00 13 00 00 00 00 6a 5d 34 8e 04 01 00 00 00 .......................j]4......
0060 0c 00 5f d0 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 .._.............................
0080 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 6a 5d 30 c6 04 01 00 00 00 02 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 ......j]0.......................
0200 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 .........................5......
0220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 00 00 00 .................(..............
0240 00 00 00 00 00 00 00 00 00 5c 03 00 00 00 00 00 00 35 81 5f d0 00 00 00 01 00 00 00 03 00 00 00 .........\.......5._............
0260 00 00 00 00 00 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 ................................
0280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 31 42 04 01 00 00 00 .......................j]1B.....
03e0 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 29 00 00 00 1f 23 64 65 66 69 6e 65 20 ...................)....#define.
0400 5f 50 4f 53 49 58 5f 43 5f 53 4f 55 52 43 45 20 31 39 39 33 30 39 4c 00 00 00 12 23 69 6e 63 6c _POSIX_C_SOURCE.199309L....#incl
0420 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 ude.<stdio.h>....#include.<stdli
0440 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 13 23 b.h>....#include.<string.h>....#
0460 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c include.<unistd.h>....#include.<
0480 68 69 73 74 65 64 69 74 2e 68 3e 00 00 00 00 00 00 00 24 73 74 61 74 69 63 20 63 68 61 72 20 2a histedit.h>.......$static.char.*
04a0 67 65 74 5f 70 72 6f 6d 70 74 28 45 64 69 74 4c 69 6e 65 20 2a 65 29 00 00 00 01 7b 00 00 00 1a get_prompt(EditLine.*e)....{....
04c0 20 20 20 20 73 74 61 74 69 63 20 63 68 61 72 20 70 72 6f 6d 70 74 5b 33 5d 3b 00 00 00 2c 20 20 ....static.char.prompt[3];...,..
04e0 20 20 70 72 6f 6d 70 74 5b 30 5d 20 3d 20 28 67 65 74 75 69 64 28 29 20 3d 3d 20 30 29 20 3f 20 ..prompt[0].=.(getuid().==.0).?.
0500 27 23 27 20 3a 20 27 24 27 3b 00 00 00 14 20 20 20 20 70 72 6f 6d 70 74 5b 31 5d 20 3d 20 27 20 '#'.:.'$';........prompt[1].=.'.
0520 27 3b 00 00 00 15 20 20 20 20 70 72 6f 6d 70 74 5b 32 5d 20 3d 20 27 5c 30 27 3b 00 00 00 12 20 ';........prompt[2].=.'\0';.....
0540 20 20 20 72 65 74 75 72 6e 20 70 72 6f 6d 70 74 3b 00 00 00 01 7d 00 00 00 00 00 00 00 14 76 6f ...return.prompt;....}........vo
0560 69 64 20 72 75 6e 5f 73 68 65 6c 6c 28 76 6f 69 64 29 00 00 00 01 7b 00 00 00 11 20 20 20 20 45 id.run_shell(void)....{........E
0580 64 69 74 4c 69 6e 65 20 2a 65 6c 3b 00 00 00 12 20 20 20 20 48 69 73 74 6f 72 79 20 2a 68 69 73 ditLine.*el;........History.*his
05a0 74 3b 00 00 00 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 3b 00 00 00 0e 20 20 20 20 69 t;........HistEvent.ev;........i
05c0 6e 74 20 63 6f 75 6e 74 3b 00 00 00 15 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 6e nt.count;........const.char.*lin
05e0 65 3b 00 00 00 00 00 00 00 2f 20 20 20 20 65 6c 20 3d 20 65 6c 5f 69 6e 69 74 28 22 6d 73 68 22 e;......./....el.=.el_init("msh"
0600 2c 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 72 29 3b 00 00 00 1a 20 20 20 ,.stdin,.stdout,.stderr);.......
0620 20 68 69 73 74 20 3d 20 68 69 73 74 6f 72 79 5f 69 6e 69 74 28 29 3b 00 00 00 27 20 20 20 20 68 .hist.=.history_init();...'....h
0640 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 53 45 54 53 49 5a 45 2c 20 31 30 30 istory(hist,.&ev,.H_SETSIZE,.100
0660 29 3b 00 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 48 49 53 54 2c 20 68 69 );...'....el_set(el,.EL_HIST,.hi
0680 73 74 6f 72 79 2c 20 68 69 73 74 29 3b 00 00 00 26 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 story,.hist);...&....el_set(el,.
06a0 45 4c 5f 50 52 4f 4d 50 54 2c 20 67 65 74 5f 70 72 6f 6d 70 74 29 3b 00 00 00 20 20 20 20 20 65 EL_PROMPT,.get_prompt);........e
06c0 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 45 44 49 54 4f 52 2c 20 22 76 69 22 29 3b 00 00 00 00 00 l_set(el,.EL_EDITOR,."vi");.....
06e0 00 00 32 20 20 20 20 77 68 69 6c 65 20 28 28 6c 69 6e 65 20 3d 20 65 6c 5f 67 65 74 73 28 65 6c ..2....while.((line.=.el_gets(el
0700 2c 20 26 63 6f 75 6e 74 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 00 00 00 18 20 20 20 20 20 20 20 ,.&count)).!=.NULL).{...........
0720 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 31 29 20 7b 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 .if.(count.>.1).{...............
0740 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e .history(hist,.&ev,.H_ENTER,.lin
0760 65 29 3b 00 00 00 19 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 28 6c 69 6e 65 29 3b e);................system(line);
0780 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 00 00 00 00 16 20 20 ............}........}..........
07a0 20 20 68 69 73 74 6f 72 79 5f 65 6e 64 28 68 69 73 74 29 3b 00 00 00 0f 20 20 20 20 65 6c 5f 65 ..history_end(hist);........el_e
07c0 6e 64 28 65 6c 29 3b 00 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 29 00 00 00 nd(el);....}5...............)...
07e0 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5d 03 00 00 00 00 00 00 01 00 00 00 ....................]...........
0800 00 00 00 00 35 81 5f d0 00 00 00 02 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 01 ....5._.........................
0820 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0980 00 00 00 00 00 00 00 00 00 00 6a 5d 31 42 04 01 00 00 00 03 00 f5 18 00 00 00 00 00 00 00 00 00 ..........j]1B..................
09a0 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 .............................5..
09c0 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 00 00 00 01 00 00 00 00 00 00 .....................E..........
09e0 00 00 00 00 00 00 00 00 00 00 00 00 00 2e 06 00 00 00 00 00 00 35 81 5f d0 00 00 00 03 00 00 00 .....................5._........
0a00 05 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 ................................
0a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 31 84 04 ...........................j]1..
0b80 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 46 00 00 00 1f 23 64 65 66 .......................F....#def
0ba0 69 6e 65 20 5f 50 4f 53 49 58 5f 43 5f 53 4f 55 52 43 45 20 32 30 30 38 30 39 4c 00 00 00 12 23 ine._POSIX_C_SOURCE.200809L....#
0bc0 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 include.<stdio.h>....#include.<s
0be0 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 tdlib.h>....#include.<string.h>.
0c00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 ...#include.<unistd.h>....#inclu
0c20 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 77 de.<signal.h>....#include.<sys/w
0c40 61 69 74 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 68 69 73 74 65 64 69 74 2e 68 3e 00 ait.h>....#include.<histedit.h>.
0c60 00 00 00 00 00 00 27 73 74 61 74 69 63 20 63 68 61 72 20 2a 70 72 6f 6d 70 74 5f 66 75 6e 63 28 ......'static.char.*prompt_func(
0c80 45 64 69 74 4c 69 6e 65 20 2a 65 29 20 7b 00 00 00 17 20 20 20 20 73 74 61 74 69 63 20 63 68 61 EditLine.*e).{........static.cha
0ca0 72 20 62 75 66 5b 33 5d 3b 00 00 00 29 20 20 20 20 62 75 66 5b 30 5d 20 3d 20 28 67 65 74 75 69 r.buf[3];...)....buf[0].=.(getui
0cc0 64 28 29 20 3d 3d 20 30 29 20 3f 20 27 23 27 20 3a 20 27 24 27 3b 00 00 00 20 20 20 20 20 62 75 d().==.0).?.'#'.:.'$';........bu
0ce0 66 5b 31 5d 20 3d 20 27 20 27 3b 20 62 75 66 5b 32 5d 20 3d 20 27 5c 30 27 3b 00 00 00 0f 20 20 f[1].=.'.';.buf[2].=.'\0';......
0d00 20 20 72 65 74 75 72 6e 20 62 75 66 3b 00 00 00 01 7d 00 00 00 00 00 00 00 21 73 74 61 74 69 63 ..return.buf;....}.......!static
0d20 20 76 6f 69 64 20 65 78 65 63 75 74 65 28 63 68 61 72 20 2a 6c 69 6e 65 29 20 7b 00 00 00 13 20 .void.execute(char.*line).{.....
0d40 20 20 20 63 68 61 72 20 2a 61 72 67 73 5b 36 34 5d 3b 00 00 00 0e 20 20 20 20 69 6e 74 20 69 20 ...char.*args[64];........int.i.
0d60 3d 20 30 3b 00 00 00 0e 20 20 20 20 70 69 64 5f 74 20 70 69 64 3b 00 00 00 28 20 20 20 20 63 68 =.0;........pid_t.pid;...(....ch
0d80 61 72 20 2a 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 6c 69 6e 65 2c 20 22 20 5c 74 5c 6e 22 ar.*token.=.strtok(line,.".\t\n"
0da0 29 3b 00 00 00 00 00 00 00 1d 20 20 20 20 77 68 69 6c 65 20 28 74 6f 6b 65 6e 20 26 26 20 69 20 );............while.(token.&&.i.
0dc0 3c 20 36 33 29 20 7b 00 00 00 1a 20 20 20 20 20 20 20 20 61 72 67 73 5b 69 2b 2b 5d 20 3d 20 74 <.63).{............args[i++].=.t
0de0 6f 6b 65 6e 3b 00 00 00 26 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 oken;...&........token.=.strtok(
0e00 4e 55 4c 4c 2c 20 22 20 5c 74 5c 6e 22 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 13 20 20 20 20 NULL,.".\t\n");........}........
0e20 61 72 67 73 5b 69 5d 20 3d 20 4e 55 4c 4c 3b 00 00 00 00 00 00 00 17 20 20 20 20 69 66 20 28 69 args[i].=.NULL;............if.(i
0e40 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 3b 00 00 00 00 00 00 00 25 20 20 20 20 69 66 20 28 73 74 .==.0).return;.......%....if.(st
0e60 72 63 6d 70 28 61 72 67 73 5b 30 5d 2c 20 22 63 64 22 29 20 3d 3d 20 30 29 20 7b 00 00 00 49 20 rcmp(args[0],."cd").==.0).{...I.
0e80 20 20 20 20 20 20 20 69 66 20 28 63 68 64 69 72 28 61 72 67 73 5b 31 5d 20 3f 20 61 72 67 73 5b .......if.(chdir(args[1].?.args[
0ea0 31 5d 20 3a 20 67 65 74 65 6e 76 28 22 48 4f 4d 45 22 29 29 20 21 3d 20 30 29 20 70 65 72 72 6f 1].:.getenv("HOME")).!=.0).perro
0ec0 72 28 22 63 64 22 29 3b 00 00 00 0f 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 00 00 00 05 20 r("cd");............return;.....
0ee0 20 20 20 7d 00 00 00 2e 20 20 20 20 69 66 20 28 73 74 72 63 6d 70 28 61 72 67 73 5b 30 5d 2c 20 ...}........if.(strcmp(args[0],.
0f00 22 65 78 69 74 22 29 20 3d 3d 20 30 29 20 65 78 69 74 28 30 29 3b 00 00 00 00 00 00 00 11 20 20 "exit").==.0).exit(0);..........
0f20 20 20 70 69 64 20 3d 20 66 6f 72 6b 28 29 3b 00 00 00 13 20 20 20 20 69 66 20 28 70 69 64 20 3d ..pid.=.fork();........if.(pid.=
0f40 3d 20 30 29 20 7b 00 00 00 1e 20 20 20 20 20 20 20 20 65 78 65 63 76 70 28 61 72 67 73 5b 30 5d =.0).{............execvp(args[0]
0f60 2c 20 61 72 67 73 29 3b 00 00 00 19 20 20 20 20 20 20 20 20 70 65 72 72 6f 72 28 22 65 78 65 63 ,.args);............perror("exec
0f80 76 70 22 29 3b 00 00 00 10 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 00 00 00 19 20 20 20 vp");............exit(1);.......
0fa0 20 7d 20 65 6c 73 65 20 69 66 20 28 70 69 64 20 3e 20 30 29 20 7b 00 00 00 13 20 20 20 20 20 20 .}.else.if.(pid.>.0).{..........
0fc0 20 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 ..wait(NULL);........}....}.....
0fe0 00 00 16 76 6f 69 64 20 72 75 6e 5f 73 68 65 6c 6c 28 76 6f 69 64 29 20 7b 00 00 00 39 20 20 20 ...void.run_shell(void).{...9...
1000 20 45 64 69 74 4c 69 6e 65 20 2a 65 6c 20 3d 20 65 6c 5f 69 6e 69 74 28 22 6d 73 68 22 2c 20 73 .EditLine.*el.=.el_init("msh",.s
1020 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 72 29 3b 00 00 00 23 20 20 20 20 48 69 tdin,.stdout,.stderr);...#....Hi
1040 73 74 6f 72 79 20 2a 68 69 73 74 20 3d 20 68 69 73 74 6f 72 79 5f 69 6e 69 74 28 29 3b 00 00 00 story.*hist.=.history_init();...
1060 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 3b 00 00 00 15 20 20 20 20 63 6f 6e 73 74 20 .....HistEvent.ev;........const.
1080 63 68 61 72 20 2a 6c 69 6e 65 3b 00 00 00 0e 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 3b 00 00 00 char.*line;........int.count;...
10a0 00 00 00 00 27 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 53 45 ....'....history(hist,.&ev,.H_SE
10c0 54 53 49 5a 45 2c 20 31 30 30 29 3b 00 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 TSIZE,.100);...'....el_set(el,.E
10e0 4c 5f 48 49 53 54 2c 20 68 69 73 74 6f 72 79 2c 20 68 69 73 74 29 3b 00 00 00 27 20 20 20 20 65 L_HIST,.history,.hist);...'....e
1100 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 50 52 4f 4d 50 54 2c 20 70 72 6f 6d 70 74 5f 66 75 6e 63 l_set(el,.EL_PROMPT,.prompt_func
1120 29 3b 00 00 00 20 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 45 44 49 54 4f 52 2c 20 );........el_set(el,.EL_EDITOR,.
1140 22 76 69 22 29 3b 00 00 00 1c 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 "vi");........signal(SIGINT,.SIG
1160 5f 49 47 4e 29 3b 00 00 00 00 00 00 00 3f 20 20 20 20 77 68 69 6c 65 20 28 28 6c 69 6e 65 20 3d _IGN);.......?....while.((line.=
1180 20 65 6c 5f 67 65 74 73 28 65 6c 2c 20 26 63 6f 75 6e 74 29 29 20 21 3d 20 4e 55 4c 4c 20 26 26 .el_gets(el,.&count)).!=.NULL.&&
11a0 20 63 6f 75 6e 74 20 3e 20 31 29 20 7b 00 00 00 21 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 63 .count.>.1).{...!........char.*c
11c0 6d 64 20 3d 20 73 74 72 64 75 70 28 6c 69 6e 65 29 3b 00 00 00 12 20 20 20 20 20 20 20 20 69 66 md.=.strdup(line);............if
11e0 20 28 63 6d 64 29 20 7b 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 28 .(cmd).{................history(
1200 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e 65 29 3b 00 00 00 19 20 20 hist,.&ev,.H_ENTER,.line);......
1220 20 20 20 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 63 6d 64 29 3b 00 00 00 16 20 20 20 20 20 ..........execute(cmd);.........
1240 20 20 20 20 20 20 20 66 72 65 65 28 63 6d 64 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 .......free(cmd);............}..
1260 00 05 20 20 20 20 7d 00 00 00 0f 20 20 20 20 65 6c 5f 65 6e 64 28 65 6c 29 3b 00 00 00 16 20 20 ......}........el_end(el);......
1280 20 20 68 69 73 74 6f 72 79 5f 65 6e 64 28 68 69 73 74 29 3b 00 00 00 01 7d 35 81 f5 18 00 00 00 ..history_end(hist);....}5......
12a0 00 00 00 00 00 00 00 00 00 46 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........F......................
12c0 00 2f 06 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 04 00 00 00 06 00 00 00 ./...............5._............
12e0 00 00 00 00 00 00 00 00 05 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 ................................
1300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 31 85 04 01 00 00 00 .......................j]1......
1460 04 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 ................................
1480 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..........5.....................
14a0 00 00 4a 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b4 06 00 00 00 00 ..J.............................
14c0 00 00 35 81 5f d0 00 00 00 05 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 00 00 ..5._...........................
14e0 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
15e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1640 00 00 00 00 00 00 00 00 6a 5d 31 e4 04 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 ........j]1.....................
1660 00 00 00 00 4b 00 00 00 1f 23 64 65 66 69 6e 65 20 5f 50 4f 53 49 58 5f 43 5f 53 4f 55 52 43 45 ....K....#define._POSIX_C_SOURCE
1680 20 32 30 30 38 30 39 4c 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 00 00 .200809L....#include.<stdio.h>..
16a0 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 ..#include.<stdlib.h>....#includ
16c0 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 e.<string.h>....#include.<unistd
16e0 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 00 00 00 15 23 69 .h>....#include.<signal.h>....#i
1700 6e 63 6c 75 64 65 20 3c 73 79 73 2f 77 61 69 74 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 nclude.<sys/wait.h>....#include.
1720 3c 68 69 73 74 65 64 69 74 2e 68 3e 00 00 00 00 00 00 00 27 73 74 61 74 69 63 20 63 68 61 72 20 <histedit.h>.......'static.char.
1740 2a 70 72 6f 6d 70 74 5f 66 75 6e 63 28 45 64 69 74 4c 69 6e 65 20 2a 65 29 20 7b 00 00 00 0c 20 *prompt_func(EditLine.*e).{.....
1760 20 20 20 28 76 6f 69 64 29 65 3b 00 00 00 17 20 20 20 20 73 74 61 74 69 63 20 63 68 61 72 20 62 ...(void)e;........static.char.b
1780 75 66 5b 33 5d 3b 00 00 00 29 20 20 20 20 62 75 66 5b 30 5d 20 3d 20 28 67 65 74 75 69 64 28 29 uf[3];...)....buf[0].=.(getuid()
17a0 20 3d 3d 20 30 29 20 3f 20 27 23 27 20 3a 20 27 24 27 3b 00 00 00 20 20 20 20 20 62 75 66 5b 31 .==.0).?.'#'.:.'$';........buf[1
17c0 5d 20 3d 20 27 20 27 3b 20 62 75 66 5b 32 5d 20 3d 20 27 5c 30 27 3b 00 00 00 0f 20 20 20 20 72 ].=.'.';.buf[2].=.'\0';........r
17e0 65 74 75 72 6e 20 62 75 66 3b 00 00 00 01 7d 00 00 00 00 00 00 00 21 73 74 61 74 69 63 20 76 6f eturn.buf;....}.......!static.vo
1800 69 64 20 65 78 65 63 75 74 65 28 63 68 61 72 20 2a 6c 69 6e 65 29 20 7b 00 00 00 13 20 20 20 20 id.execute(char.*line).{........
1820 63 68 61 72 20 2a 61 72 67 73 5b 36 34 5d 3b 00 00 00 0e 20 20 20 20 69 6e 74 20 69 20 3d 20 30 char.*args[64];........int.i.=.0
1840 3b 00 00 00 0e 20 20 20 20 70 69 64 5f 74 20 70 69 64 3b 00 00 00 2a 20 20 20 20 63 68 61 72 20 ;........pid_t.pid;...*....char.
1860 2a 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 6c 69 6e 65 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 *token.=.strtok(line,.".\t\n\r")
1880 3b 00 00 00 00 00 00 00 1d 20 20 20 20 77 68 69 6c 65 20 28 74 6f 6b 65 6e 20 26 26 20 69 20 3c ;............while.(token.&&.i.<
18a0 20 36 33 29 20 7b 00 00 00 1a 20 20 20 20 20 20 20 20 61 72 67 73 5b 69 2b 2b 5d 20 3d 20 74 6f .63).{............args[i++].=.to
18c0 6b 65 6e 3b 00 00 00 28 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 4e ken;...(........token.=.strtok(N
18e0 55 4c 4c 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 13 20 20 20 ULL,.".\t\n\r");........}.......
1900 20 61 72 67 73 5b 69 5d 20 3d 20 4e 55 4c 4c 3b 00 00 00 00 00 00 00 17 20 20 20 20 69 66 20 28 .args[i].=.NULL;............if.(
1920 69 20 3d 3d 20 30 29 20 72 65 74 75 72 6e 3b 00 00 00 00 00 00 00 25 20 20 20 20 69 66 20 28 73 i.==.0).return;.......%....if.(s
1940 74 72 63 6d 70 28 61 72 67 73 5b 30 5d 2c 20 22 63 64 22 29 20 3d 3d 20 30 29 20 7b 00 00 00 3d trcmp(args[0],."cd").==.0).{...=
1960 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 64 69 72 20 3d 20 61 72 67 73 5b 31 ........const.char.*dir.=.args[1
1980 5d 20 3f 20 61 72 67 73 5b 31 5d 20 3a 20 67 65 74 65 6e 76 28 22 48 4f 4d 45 22 29 3b 00 00 00 ].?.args[1].:.getenv("HOME");...
19a0 31 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72 20 26 26 20 63 68 64 69 72 28 64 69 72 29 20 21 1........if.(dir.&&.chdir(dir).!
19c0 3d 20 30 29 20 70 65 72 72 6f 72 28 22 63 64 22 29 3b 00 00 00 0f 20 20 20 20 20 20 20 20 72 65 =.0).perror("cd");............re
19e0 74 75 72 6e 3b 00 00 00 05 20 20 20 20 7d 00 00 00 2e 20 20 20 20 69 66 20 28 73 74 72 63 6d 70 turn;........}........if.(strcmp
1a00 28 61 72 67 73 5b 30 5d 2c 20 22 65 78 69 74 22 29 20 3d 3d 20 30 29 20 65 78 69 74 28 30 29 3b (args[0],."exit").==.0).exit(0);
1a20 00 00 00 00 00 00 00 11 20 20 20 20 70 69 64 20 3d 20 66 6f 72 6b 28 29 3b 00 00 00 13 20 20 20 ............pid.=.fork();.......
1a40 20 69 66 20 28 70 69 64 20 3d 3d 20 30 29 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 73 69 67 6e .if.(pid.==.0).{............sign
1a60 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 44 46 4c 29 3b 00 00 00 1e 20 20 20 20 20 20 20 20 al(SIGINT,.SIG_DFL);............
1a80 65 78 65 63 76 70 28 61 72 67 73 5b 30 5d 2c 20 61 72 67 73 29 3b 00 00 00 19 20 20 20 20 20 20 execvp(args[0],.args);..........
1aa0 20 20 70 65 72 72 6f 72 28 22 65 78 65 63 76 70 22 29 3b 00 00 00 10 20 20 20 20 20 20 20 20 65 ..perror("execvp");............e
1ac0 78 69 74 28 31 29 3b 00 00 00 19 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 70 69 64 20 3e 20 xit(1);........}.else.if.(pid.>.
1ae0 30 29 20 7b 00 00 00 13 20 20 20 20 20 20 20 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 05 20 0).{............wait(NULL);.....
1b00 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 16 76 6f 69 64 20 72 75 6e 5f 73 68 65 6c 6c 28 ...}....}........void.run_shell(
1b20 76 6f 69 64 29 20 7b 00 00 00 39 20 20 20 20 45 64 69 74 4c 69 6e 65 20 2a 65 6c 20 3d 20 65 6c void).{...9....EditLine.*el.=.el
1b40 5f 69 6e 69 74 28 22 6d 73 68 22 2c 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 _init("msh",.stdin,.stdout,.stde
1b60 72 72 29 3b 00 00 00 23 20 20 20 20 48 69 73 74 6f 72 79 20 2a 68 69 73 74 20 3d 20 68 69 73 74 rr);...#....History.*hist.=.hist
1b80 6f 72 79 5f 69 6e 69 74 28 29 3b 00 00 00 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 3b ory_init();........HistEvent.ev;
1ba0 00 00 00 15 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 6e 65 3b 00 00 00 0e 20 20 20 ........const.char.*line;.......
1bc0 20 69 6e 74 20 63 6f 75 6e 74 3b 00 00 00 00 00 00 00 27 20 20 20 20 68 69 73 74 6f 72 79 28 68 .int.count;.......'....history(h
1be0 69 73 74 2c 20 26 65 76 2c 20 48 5f 53 45 54 53 49 5a 45 2c 20 31 30 30 29 3b 00 00 00 27 20 20 ist,.&ev,.H_SETSIZE,.100);...'..
1c00 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 48 49 53 54 2c 20 68 69 73 74 6f 72 79 2c 20 68 ..el_set(el,.EL_HIST,.history,.h
1c20 69 73 74 29 3b 00 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 50 52 4f 4d 50 ist);...'....el_set(el,.EL_PROMP
1c40 54 2c 20 70 72 6f 6d 70 74 5f 66 75 6e 63 29 3b 00 00 00 20 20 20 20 20 65 6c 5f 73 65 74 28 65 T,.prompt_func);........el_set(e
1c60 6c 2c 20 45 4c 5f 45 44 49 54 4f 52 2c 20 22 76 69 22 29 3b 00 00 00 1c 20 20 20 20 73 69 67 6e l,.EL_EDITOR,."vi");........sign
1c80 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 49 47 4e 29 3b 00 00 00 00 00 00 00 32 20 20 20 20 al(SIGINT,.SIG_IGN);.......2....
1ca0 77 68 69 6c 65 20 28 28 6c 69 6e 65 20 3d 20 65 6c 5f 67 65 74 73 28 65 6c 2c 20 26 63 6f 75 6e while.((line.=.el_gets(el,.&coun
1cc0 74 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 00 00 00 18 20 20 20 20 20 20 20 20 69 66 20 28 63 6f t)).!=.NULL).{............if.(co
1ce0 75 6e 74 20 3e 20 31 29 20 7b 00 00 00 25 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a unt.>.1).{...%............char.*
1d00 63 6d 64 20 3d 20 73 74 72 64 75 70 28 6c 69 6e 65 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 cmd.=.strdup(line);.............
1d20 20 20 20 69 66 20 28 63 6d 64 29 20 7b 00 00 00 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ...if.(cmd).{...2...............
1d40 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e .history(hist,.&ev,.H_ENTER,.lin
1d60 65 29 3b 00 00 00 1d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 63 e);....................execute(c
1d80 6d 64 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 65 65 28 63 6d 64 md);....................free(cmd
1da0 29 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 09 20 20 20 20 20 20 20 20 7d );................}............}
1dc0 00 00 00 05 20 20 20 20 7d 00 00 00 0f 20 20 20 20 65 6c 5f 65 6e 64 28 65 6c 29 3b 00 00 00 16 ........}........el_end(el);....
1de0 20 20 20 20 68 69 73 74 6f 72 79 5f 65 6e 64 28 68 69 73 74 29 3b 00 00 00 01 7d 35 81 f5 18 00 ....history_end(hist);....}5....
1e00 00 00 00 00 00 00 00 00 00 00 00 4b 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ...........K....................
1e20 00 00 00 b5 06 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 06 00 00 00 08 00 ...................5._..........
1e40 00 00 00 00 00 00 00 00 00 00 07 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 00 00 00 ................................
1e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 31 e4 04 01 00 .........................j]1....
1fc0 00 00 05 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 01 ................................
1fe0 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............5...................
2000 00 00 00 00 69 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a7 09 00 00 ....i...........................
2020 00 00 00 00 35 81 5f d0 00 00 00 07 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 01 ....5._.........................
2040 00 00 00 0c 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
21a0 00 00 00 00 00 00 00 00 00 00 6a 5d 32 9a 04 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 ..........j]2...................
21c0 00 00 00 00 00 00 6a 00 00 00 1f 23 64 65 66 69 6e 65 20 5f 50 4f 53 49 58 5f 43 5f 53 4f 55 52 ......j....#define._POSIX_C_SOUR
21e0 43 45 20 32 30 30 38 30 39 4c 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 CE.200809L....#include.<stddef.h
2200 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 00 00 00 13 23 69 6e 63 6c >....#include.<stdio.h>....#incl
2220 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 ude.<stdlib.h>....#include.<stri
2240 6e 67 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 00 00 00 13 ng.h>....#include.<unistd.h>....
2260 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 #include.<signal.h>....#include.
2280 3c 73 79 73 2f 77 61 69 74 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 68 69 73 74 65 64 <sys/wait.h>....#include.<histed
22a0 69 74 2e 68 3e 00 00 00 00 00 00 00 27 73 74 61 74 69 63 20 63 68 61 72 20 2a 70 72 6f 6d 70 74 it.h>.......'static.char.*prompt
22c0 5f 66 75 6e 63 28 45 64 69 74 4c 69 6e 65 20 2a 65 29 20 7b 00 00 00 0c 20 20 20 20 28 76 6f 69 _func(EditLine.*e).{........(voi
22e0 64 29 65 3b 00 00 00 17 20 20 20 20 73 74 61 74 69 63 20 63 68 61 72 20 62 75 66 5b 33 5d 3b 00 d)e;........static.char.buf[3];.
2300 00 00 29 20 20 20 20 62 75 66 5b 30 5d 20 3d 20 28 67 65 74 75 69 64 28 29 20 3d 3d 20 30 29 20 ..)....buf[0].=.(getuid().==.0).
2320 3f 20 27 23 27 20 3a 20 27 24 27 3b 00 00 00 20 20 20 20 20 62 75 66 5b 31 5d 20 3d 20 27 20 27 ?.'#'.:.'$';........buf[1].=.'.'
2340 3b 20 62 75 66 5b 32 5d 20 3d 20 27 5c 30 27 3b 00 00 00 0f 20 20 20 20 72 65 74 75 72 6e 20 62 ;.buf[2].=.'\0';........return.b
2360 75 66 3b 00 00 00 01 7d 00 00 00 00 00 00 00 20 73 74 61 74 69 63 20 76 6f 69 64 20 64 6f 5f 65 uf;....}........static.void.do_e
2380 78 65 63 28 63 68 61 72 20 2a 63 6d 64 29 20 7b 00 00 00 1b 20 20 20 20 63 68 61 72 20 2a 61 72 xec(char.*cmd).{........char.*ar
23a0 67 73 5b 36 34 5d 2c 20 2a 74 6f 6b 65 6e 3b 00 00 00 0e 20 20 20 20 69 6e 74 20 69 20 3d 20 30 gs[64],.*token;........int.i.=.0
23c0 3b 00 00 00 0e 20 20 20 20 70 69 64 5f 74 20 70 69 64 3b 00 00 00 00 00 00 00 23 20 20 20 20 74 ;........pid_t.pid;.......#....t
23e0 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 63 6d 64 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 oken.=.strtok(cmd,.".\t\n\r");..
2400 00 1d 20 20 20 20 77 68 69 6c 65 20 28 74 6f 6b 65 6e 20 26 26 20 69 20 3c 20 36 33 29 20 7b 00 ......while.(token.&&.i.<.63).{.
2420 00 00 1e 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 6b 65 6e 5b 30 5d 20 3d 3d 20 27 24 27 29 20 ...........if.(token[0].==.'$').
2440 7b 00 00 00 2a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 65 6e 76 20 3d 20 67 65 74 {...*............char.*env.=.get
2460 65 6e 76 28 74 6f 6b 65 6e 20 2b 20 31 29 3b 00 00 00 27 20 20 20 20 20 20 20 20 20 20 20 20 61 env(token.+.1);...'............a
2480 72 67 73 5b 69 2b 2b 5d 20 3d 20 65 6e 76 20 3f 20 65 6e 76 20 3a 20 22 22 3b 00 00 00 10 20 20 rgs[i++].=.env.?.env.:."";......
24a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 00 00 00 1e 20 20 20 20 20 20 20 20 20 20 20 20 61 72 ......}.else.{................ar
24c0 67 73 5b 69 2b 2b 5d 20 3d 20 74 6f 6b 65 6e 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 gs[i++].=.token;............}...
24e0 28 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 4e 55 4c 4c 2c 20 22 20 (........token.=.strtok(NULL,.".
2500 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 13 20 20 20 20 61 72 67 73 5b 69 \t\n\r");........}........args[i
2520 5d 20 3d 20 4e 55 4c 4c 3b 00 00 00 17 20 20 20 20 69 66 20 28 69 20 3d 3d 20 30 29 20 72 65 74 ].=.NULL;........if.(i.==.0).ret
2540 75 72 6e 3b 00 00 00 11 20 20 20 20 70 69 64 20 3d 20 66 6f 72 6b 28 29 3b 00 00 00 13 20 20 20 urn;........pid.=.fork();.......
2560 20 69 66 20 28 70 69 64 20 3d 3d 20 30 29 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 73 69 67 6e .if.(pid.==.0).{............sign
2580 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 44 46 4c 29 3b 00 00 00 1e 20 20 20 20 20 20 20 20 al(SIGINT,.SIG_DFL);............
25a0 65 78 65 63 76 70 28 61 72 67 73 5b 30 5d 2c 20 61 72 67 73 29 3b 00 00 00 41 20 20 20 20 20 20 execvp(args[0],.args);...A......
25c0 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6d 73 68 3a 20 25 73 3a 20 63 6f 6d 6d ..fprintf(stderr,."msh:.%s:.comm
25e0 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 5c 6e 22 2c 20 61 72 67 73 5b 30 5d 29 3b 00 00 00 10 20 and.not.found\n",.args[0]);.....
2600 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 00 00 00 19 20 20 20 20 7d 20 65 6c 73 65 20 69 66 .......exit(1);........}.else.if
2620 20 28 70 69 64 20 3e 20 30 29 20 7b 00 00 00 13 20 20 20 20 20 20 20 20 77 61 69 74 28 4e 55 4c .(pid.>.0).{............wait(NUL
2640 4c 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 21 73 74 61 74 69 63 20 L);........}....}.......!static.
2660 76 6f 69 64 20 65 78 65 63 75 74 65 28 63 68 61 72 20 2a 6c 69 6e 65 29 20 7b 00 00 00 13 20 20 void.execute(char.*line).{......
2680 20 20 63 68 61 72 20 2a 70 69 70 65 5f 70 74 72 3b 00 00 00 27 20 20 20 20 69 66 20 28 73 74 72 ..char.*pipe_ptr;...'....if.(str
26a0 6e 63 6d 70 28 6c 69 6e 65 2c 20 22 63 64 20 22 2c 20 33 29 20 3d 3d 20 30 29 20 7b 00 00 00 30 ncmp(line,."cd.",.3).==.0).{...0
26c0 20 20 20 20 20 20 20 20 69 66 20 28 63 68 64 69 72 28 6c 69 6e 65 20 2b 20 33 29 20 21 3d 20 30 ........if.(chdir(line.+.3).!=.0
26e0 29 20 70 65 72 72 6f 72 28 22 6d 73 68 22 29 3b 00 00 00 0f 20 20 20 20 20 20 20 20 72 65 74 75 ).perror("msh");............retu
2700 72 6e 3b 00 00 00 05 20 20 20 20 7d 00 00 00 2b 20 20 20 20 69 66 20 28 73 74 72 63 6d 70 28 6c rn;........}...+....if.(strcmp(l
2720 69 6e 65 2c 20 22 65 78 69 74 22 29 20 3d 3d 20 30 29 20 65 78 69 74 28 30 29 3b 00 00 00 00 00 ine,."exit").==.0).exit(0);.....
2740 00 00 21 20 20 20 20 70 69 70 65 5f 70 74 72 20 3d 20 73 74 72 63 68 72 28 6c 69 6e 65 2c 20 27 ..!....pipe_ptr.=.strchr(line,.'
2760 7c 27 29 3b 00 00 00 13 20 20 20 20 69 66 20 28 70 69 70 65 5f 70 74 72 29 20 7b 00 00 00 12 20 |');........if.(pipe_ptr).{.....
2780 20 20 20 20 20 20 20 69 6e 74 20 66 64 5b 32 5d 3b 00 00 00 19 20 20 20 20 20 20 20 20 2a 70 69 .......int.fd[2];............*pi
27a0 70 65 5f 70 74 72 20 3d 20 27 5c 30 27 3b 00 00 00 11 20 20 20 20 20 20 20 20 70 69 70 65 28 66 pe_ptr.=.'\0';............pipe(f
27c0 64 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 d);............if.(fork().==.0).
27e0 7b 00 00 00 1b 20 20 20 20 20 20 20 20 20 20 20 20 64 75 70 32 28 66 64 5b 31 5d 2c 20 31 29 3b {................dup2(fd[1],.1);
2800 00 00 00 27 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c ...'............close(fd[0]);.cl
2820 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 5f 65 78 ose(fd[1]);................do_ex
2840 65 63 28 6c 69 6e 65 29 3b 00 00 00 14 20 20 20 20 20 20 20 20 20 20 20 20 65 78 69 74 28 30 29 ec(line);................exit(0)
2860 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 1a 20 20 20 20 20 20 20 20 69 66 20 28 66 6f ;............}............if.(fo
2880 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 1b 20 20 20 20 20 20 20 20 20 20 20 20 64 75 70 32 rk().==.0).{................dup2
28a0 28 66 64 5b 30 5d 2c 20 30 29 3b 00 00 00 27 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 6f 73 65 (fd[0],.0);...'............close
28c0 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 22 20 20 20 20 20 20 (fd[0]);.close(fd[1]);..."......
28e0 20 20 20 20 20 20 64 6f 5f 65 78 65 63 28 70 69 70 65 5f 70 74 72 20 2b 20 31 29 3b 00 00 00 14 ......do_exec(pipe_ptr.+.1);....
2900 20 20 20 20 20 20 20 20 20 20 20 20 65 78 69 74 28 30 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 ............exit(0);............
2920 7d 00 00 00 23 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 }...#........close(fd[0]);.close
2940 28 66 64 5b 31 5d 29 3b 00 00 00 1f 20 20 20 20 20 20 20 20 77 61 69 74 28 4e 55 4c 4c 29 3b 20 (fd[1]);............wait(NULL);.
2960 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 0c 20 20 20 20 7d 20 65 6c 73 65 20 7b 00 00 00 16 20 wait(NULL);........}.else.{.....
2980 20 20 20 20 20 20 20 64 6f 5f 65 78 65 63 28 6c 69 6e 65 29 3b 00 00 00 05 20 20 20 20 7d 00 00 .......do_exec(line);........}..
29a0 00 01 7d 00 00 00 00 00 00 00 16 76 6f 69 64 20 72 75 6e 5f 73 68 65 6c 6c 28 76 6f 69 64 29 20 ..}........void.run_shell(void).
29c0 7b 00 00 00 11 20 20 20 20 45 64 69 74 4c 69 6e 65 20 2a 65 6c 3b 00 00 00 12 20 20 20 20 48 69 {........EditLine.*el;........Hi
29e0 73 74 6f 72 79 20 2a 68 69 73 74 3b 00 00 00 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 story.*hist;........HistEvent.ev
2a00 3b 00 00 00 15 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 6e 65 3b 00 00 00 0e 20 20 ;........const.char.*line;......
2a20 20 20 69 6e 74 20 63 6f 75 6e 74 3b 00 00 00 00 00 00 00 2f 20 20 20 20 65 6c 20 3d 20 65 6c 5f ..int.count;......./....el.=.el_
2a40 69 6e 69 74 28 22 6d 73 68 22 2c 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 init("msh",.stdin,.stdout,.stder
2a60 72 29 3b 00 00 00 1a 20 20 20 20 68 69 73 74 20 3d 20 68 69 73 74 6f 72 79 5f 69 6e 69 74 28 29 r);........hist.=.history_init()
2a80 3b 00 00 00 27 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 53 45 ;...'....history(hist,.&ev,.H_SE
2aa0 54 53 49 5a 45 2c 20 31 30 30 29 3b 00 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 TSIZE,.100);...'....el_set(el,.E
2ac0 4c 5f 48 49 53 54 2c 20 68 69 73 74 6f 72 79 2c 20 68 69 73 74 29 3b 00 00 00 27 20 20 20 20 65 L_HIST,.history,.hist);...'....e
2ae0 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 50 52 4f 4d 50 54 2c 20 70 72 6f 6d 70 74 5f 66 75 6e 63 l_set(el,.EL_PROMPT,.prompt_func
2b00 29 3b 00 00 00 20 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 45 44 49 54 4f 52 2c 20 );........el_set(el,.EL_EDITOR,.
2b20 22 76 69 22 29 3b 00 00 00 1c 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 "vi");........signal(SIGINT,.SIG
2b40 5f 49 47 4e 29 3b 00 00 00 00 00 00 00 32 20 20 20 20 77 68 69 6c 65 20 28 28 6c 69 6e 65 20 3d _IGN);.......2....while.((line.=
2b60 20 65 6c 5f 67 65 74 73 28 65 6c 2c 20 26 63 6f 75 6e 74 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b .el_gets(el,.&count)).!=.NULL).{
2b80 00 00 00 18 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 31 29 20 7b 00 00 00 25 ............if.(count.>.1).{...%
2ba0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 63 6d 64 20 3d 20 73 74 72 64 75 70 28 6c ............char.*cmd.=.strdup(l
2bc0 69 6e 65 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6d 64 29 20 7b 00 ine);................if.(cmd).{.
2be0 00 00 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c ..2................history(hist,
2c00 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e 65 29 3b 00 00 00 1d 20 20 20 20 20 20 20 .&ev,.H_ENTER,.line);...........
2c20 20 20 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 63 6d 64 29 3b 00 00 00 1a 20 20 20 20 20 20 .........execute(cmd);..........
2c40 20 20 20 20 20 20 20 20 20 20 66 72 65 65 28 63 6d 64 29 3b 00 00 00 0d 20 20 20 20 20 20 20 20 ..........free(cmd);............
2c60 20 20 20 20 7d 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 0f 20 ....}............}........}.....
2c80 20 20 20 65 6c 5f 65 6e 64 28 65 6c 29 3b 00 00 00 16 20 20 20 20 68 69 73 74 6f 72 79 5f 65 6e ...el_end(el);........history_en
2ca0 64 28 68 69 73 74 29 3b 00 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 6a 00 00 d(hist);....}5...............j..
2cc0 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 a8 09 00 00 00 00 00 00 01 00 00 ................................
2ce0 00 00 00 00 00 35 81 5f d0 00 00 00 08 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 09 00 00 00 .....5._........................
2d00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2e60 00 00 00 00 00 00 00 00 00 00 00 6a 5d 32 9b 04 01 00 00 00 07 00 f5 18 00 00 00 00 00 00 00 00 ...........j]2..................
2e80 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 ..............................5.
2ea0 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 51 00 00 00 01 00 00 00 00 00 ......................Q.........
2ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d8 08 00 00 00 00 00 00 35 81 5f d0 00 00 00 09 00 00 ......................5._.......
2ee0 00 0b 00 00 00 00 00 00 00 00 00 00 00 0a 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 ................................
2f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 33 1a ............................j]3.
3060 04 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 52 00 00 00 1f 23 64 65 ........................R....#de
3080 66 69 6e 65 20 5f 50 4f 53 49 58 5f 43 5f 53 4f 55 52 43 45 20 32 30 30 38 30 39 4c 00 00 00 12 fine._POSIX_C_SOURCE.200809L....
30a0 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c #include.<stdio.h>....#include.<
30c0 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e stdlib.h>....#include.<string.h>
30e0 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 00 00 00 13 23 69 6e 63 6c ....#include.<unistd.h>....#incl
3100 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f ude.<signal.h>....#include.<sys/
3120 77 61 69 74 2e 68 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 00 00 00 wait.h>....#include.<fcntl.h>...
3140 15 23 69 6e 63 6c 75 64 65 20 3c 68 69 73 74 65 64 69 74 2e 68 3e 00 00 00 00 00 00 00 26 73 74 .#include.<histedit.h>.......&st
3160 61 74 69 63 20 63 68 61 72 20 2a 67 65 74 5f 70 72 6f 6d 70 74 28 45 64 69 74 4c 69 6e 65 20 2a atic.char.*get_prompt(EditLine.*
3180 65 29 20 7b 00 00 00 0c 20 20 20 20 28 76 6f 69 64 29 65 3b 00 00 00 29 20 20 20 20 72 65 74 75 e).{........(void)e;...)....retu
31a0 72 6e 20 28 67 65 74 75 69 64 28 29 20 3d 3d 20 30 29 20 3f 20 22 23 20 22 20 3a 20 22 24 20 22 rn.(getuid().==.0).?."#.".:."$."
31c0 3b 00 00 00 01 7d 00 00 00 00 00 00 00 20 73 74 61 74 69 63 20 76 6f 69 64 20 72 75 6e 5f 63 6d ;....}........static.void.run_cm
31e0 64 28 63 68 61 72 20 2a 63 6d 64 29 20 7b 00 00 00 22 20 20 20 20 63 68 61 72 20 2a 61 72 67 73 d(char.*cmd).{..."....char.*args
3200 5b 36 34 5d 2c 20 2a 74 6f 6b 65 6e 2c 20 2a 66 69 6c 65 3b 00 00 00 12 20 20 20 20 69 6e 74 20 [64],.*token,.*file;........int.
3220 69 20 3d 20 30 2c 20 66 64 3b 00 00 00 23 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b i.=.0,.fd;...#....token.=.strtok
3240 28 63 6d 64 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 1d 20 20 20 20 77 68 69 6c 65 20 28 (cmd,.".\t\n\r");........while.(
3260 74 6f 6b 65 6e 20 26 26 20 69 20 3c 20 36 33 29 20 7b 00 00 00 26 20 20 20 20 20 20 20 20 69 66 token.&&.i.<.63).{...&........if
3280 20 28 73 74 72 63 6d 70 28 74 6f 6b 65 6e 2c 20 22 3e 22 29 20 3d 3d 20 30 29 20 7b 00 00 00 2b .(strcmp(token,.">").==.0).{...+
32a0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 3d 20 73 74 72 74 6f 6b 28 4e 55 4c 4c 2c 20 ............file.=.strtok(NULL,.
32c0 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 40 20 20 20 20 20 20 20 20 20 20 20 20 66 64 20 3d 20 ".\t\n\r");...@............fd.=.
32e0 6f 70 65 6e 28 66 69 6c 65 2c 20 4f 5f 57 52 4f 4e 4c 59 20 7c 20 4f 5f 43 52 45 41 54 20 7c 20 open(file,.O_WRONLY.|.O_CREAT.|.
3300 4f 5f 54 52 55 4e 43 2c 20 30 36 34 34 29 3b 00 00 00 24 20 20 20 20 20 20 20 20 20 20 20 20 64 O_TRUNC,.0644);...$............d
3320 75 70 32 28 66 64 2c 20 53 54 44 4f 55 54 5f 46 49 4c 45 4e 4f 29 3b 00 00 00 16 20 20 20 20 20 up2(fd,.STDOUT_FILENO);.........
3340 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 29 3b 00 00 00 21 20 20 20 20 20 20 20 20 7d 20 65 .......close(fd);...!........}.e
3360 6c 73 65 20 61 72 67 73 5b 69 2b 2b 5d 20 3d 20 74 6f 6b 65 6e 3b 00 00 00 28 20 20 20 20 20 20 lse.args[i++].=.token;...(......
3380 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 4e 55 4c 4c 2c 20 22 20 5c 74 5c 6e 5c 72 22 ..token.=.strtok(NULL,.".\t\n\r"
33a0 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 13 20 20 20 20 61 72 67 73 5b 69 5d 20 3d 20 4e 55 4c );........}........args[i].=.NUL
33c0 4c 3b 00 00 00 10 20 20 20 20 69 66 20 28 69 20 3e 20 30 29 20 7b 00 00 00 1e 20 20 20 20 20 20 L;........if.(i.>.0).{..........
33e0 20 20 65 78 65 63 76 70 28 61 72 67 73 5b 30 5d 2c 20 61 72 67 73 29 3b 00 00 00 41 20 20 20 20 ..execvp(args[0],.args);...A....
3400 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6d 73 68 3a 20 25 73 3a 20 63 6f ....fprintf(stderr,."msh:.%s:.co
3420 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 5c 6e 22 2c 20 61 72 67 73 5b 30 5d 29 3b 00 00 00 mmand.not.found\n",.args[0]);...
3440 10 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 .........exit(1);........}....}.
3460 00 00 00 00 00 00 21 73 74 61 74 69 63 20 76 6f 69 64 20 65 78 65 63 75 74 65 28 63 68 61 72 20 ......!static.void.execute(char.
3480 2a 6c 69 6e 65 29 20 7b 00 00 00 27 20 20 20 20 69 66 20 28 73 74 72 6e 63 6d 70 28 6c 69 6e 65 *line).{...'....if.(strncmp(line
34a0 2c 20 22 63 64 20 22 2c 20 33 29 20 3d 3d 20 30 29 20 7b 00 00 00 30 20 20 20 20 20 20 20 20 69 ,."cd.",.3).==.0).{...0........i
34c0 66 20 28 63 68 64 69 72 28 6c 69 6e 65 20 2b 20 33 29 20 21 3d 20 30 29 20 70 65 72 72 6f 72 28 f.(chdir(line.+.3).!=.0).perror(
34e0 22 6d 73 68 22 29 3b 00 00 00 32 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73 74 72 63 6d 70 "msh");...2....}.else.if.(strcmp
3500 28 6c 69 6e 65 2c 20 22 65 78 69 74 22 29 20 3d 3d 20 30 29 20 65 78 69 74 28 30 29 3b 00 00 00 (line,."exit").==.0).exit(0);...
3520 0a 20 20 20 20 65 6c 73 65 20 7b 00 00 00 24 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 70 20 3d .....else.{...$........char.*p.=
3540 20 73 74 72 63 68 72 28 6c 69 6e 65 2c 20 27 7c 27 29 3b 00 00 00 10 20 20 20 20 20 20 20 20 69 .strchr(line,.'|');............i
3560 66 20 28 70 29 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 66 64 5b 32 5d f.(p).{................int.fd[2]
3580 3b 20 70 69 70 65 28 66 64 29 3b 00 00 00 1e 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 ;.pipe(fd);................if.(f
35a0 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ork().==.0).{...;...............
35c0 20 64 75 70 32 28 66 64 5b 31 5d 2c 20 31 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 .dup2(fd[1],.1);.close(fd[0]);.c
35e0 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 1e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lose(fd[1]);....................
3600 72 75 6e 5f 63 6d 64 28 6c 69 6e 65 29 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 run_cmd(line);................}.
3620 00 00 1e 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 ...............if.(fork().==.0).
3640 7b 00 00 00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 75 70 32 28 66 64 5b 30 5d 2c {...;................dup2(fd[0],
3660 20 30 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b .0);.close(fd[0]);.close(fd[1]);
3680 00 00 00 1f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 5f 63 6d 64 28 70 20 2b 20 ....................run_cmd(p.+.
36a0 31 29 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 27 20 20 20 20 20 20 20 20 1);................}...'........
36c0 20 20 20 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 ....close(fd[0]);.close(fd[1]);.
36e0 00 00 23 20 20 20 20 20 20 20 20 20 20 20 20 77 61 69 74 28 4e 55 4c 4c 29 3b 20 77 61 69 74 28 ..#............wait(NULL);.wait(
3700 4e 55 4c 4c 29 3b 00 00 00 21 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 66 6f 72 NULL);...!........}.else.if.(for
3720 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 24 20 20 20 20 20 20 20 20 20 20 20 20 73 69 67 6e 61 k().==.0).{...$............signa
3740 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 44 46 4c 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 20 l(SIGINT,.SIG_DFL);.............
3760 20 20 20 72 75 6e 5f 63 6d 64 28 6c 69 6e 65 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 7d 20 65 ...run_cmd(line);............}.e
3780 6c 73 65 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 lse.wait(NULL);........}....}...
37a0 00 00 00 00 16 76 6f 69 64 20 72 75 6e 5f 73 68 65 6c 6c 28 76 6f 69 64 29 20 7b 00 00 00 39 20 .....void.run_shell(void).{...9.
37c0 20 20 20 45 64 69 74 4c 69 6e 65 20 2a 65 6c 20 3d 20 65 6c 5f 69 6e 69 74 28 22 6d 73 68 22 2c ...EditLine.*el.=.el_init("msh",
37e0 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 72 29 3b 00 00 00 23 20 20 20 20 .stdin,.stdout,.stderr);...#....
3800 48 69 73 74 6f 72 79 20 2a 68 69 73 74 20 3d 20 68 69 73 74 6f 72 79 5f 69 6e 69 74 28 29 3b 00 History.*hist.=.history_init();.
3820 00 00 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 3b 00 00 00 27 20 20 20 20 68 69 73 74 .......HistEvent.ev;...'....hist
3840 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 53 45 54 53 49 5a 45 2c 20 31 30 30 29 3b 00 ory(hist,.&ev,.H_SETSIZE,.100);.
3860 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 48 49 53 54 2c 20 68 69 73 74 6f ..'....el_set(el,.EL_HIST,.histo
3880 72 79 2c 20 68 69 73 74 29 3b 00 00 00 26 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f ry,.hist);...&....el_set(el,.EL_
38a0 50 52 4f 4d 50 54 2c 20 67 65 74 5f 70 72 6f 6d 70 74 29 3b 00 00 00 20 20 20 20 20 65 6c 5f 73 PROMPT,.get_prompt);........el_s
38c0 65 74 28 65 6c 2c 20 45 4c 5f 45 44 49 54 4f 52 2c 20 22 76 69 22 29 3b 00 00 00 1c 20 20 20 20 et(el,.EL_EDITOR,."vi");........
38e0 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 49 47 4e 29 3b 00 00 00 15 20 20 20 20 signal(SIGINT,.SIG_IGN);........
3900 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 6e 65 3b 00 00 00 0e 20 20 20 20 69 6e 74 20 63 6f 75 const.char.*line;........int.cou
3920 6e 74 3b 00 00 00 32 20 20 20 20 77 68 69 6c 65 20 28 28 6c 69 6e 65 20 3d 20 65 6c 5f 67 65 74 nt;...2....while.((line.=.el_get
3940 73 28 65 6c 2c 20 26 63 6f 75 6e 74 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 00 00 00 18 20 20 20 s(el,.&count)).!=.NULL).{.......
3960 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 31 29 20 7b 00 00 00 25 20 20 20 20 20 20 20 .....if.(count.>.1).{...%.......
3980 20 20 20 20 20 63 68 61 72 20 2a 63 6d 64 20 3d 20 73 74 72 64 75 70 28 6c 69 6e 65 29 3b 00 00 .....char.*cmd.=.strdup(line);..
39a0 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c ..............history(hist,.&ev,
39c0 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e 65 29 3b 00 00 00 19 20 20 20 20 20 20 20 20 20 20 20 20 .H_ENTER,.line);................
39e0 65 78 65 63 75 74 65 28 63 6d 64 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 66 72 65 execute(cmd);................fre
3a00 65 28 63 6d 64 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 e(cmd);............}........}...
3a20 22 20 20 20 20 65 6c 5f 65 6e 64 28 65 6c 29 3b 20 68 69 73 74 6f 72 79 5f 65 6e 64 28 68 69 73 "....el_end(el);.history_end(his
3a40 74 29 3b 00 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 52 00 00 00 00 00 00 00 t);....}5...............R.......
3a60 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 d9 08 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................................
3a80 35 81 5f d0 00 00 00 0a 00 00 00 0c 00 00 00 00 00 00 00 00 00 00 00 0b 00 00 00 01 00 00 00 00 5._.............................
3aa0 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3c00 00 00 00 00 00 00 6a 5d 33 1a 04 01 00 00 00 08 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 ......j]3.......................
3c20 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 .........................5......
3c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 00 00 01 00 00 00 00 00 00 00 00 00 00 .................T..............
3c60 00 00 00 00 00 00 00 00 00 0c 09 00 00 00 00 00 00 35 81 5f d0 00 00 00 0b 00 00 00 0d 00 00 00 .................5._............
3c80 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 ................................
3ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
3de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 33 9b 04 01 00 00 00 .......................j]3......
3e00 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 55 00 00 00 1f 23 64 65 66 69 6e 65 20 ...................U....#define.
3e20 5f 50 4f 53 49 58 5f 43 5f 53 4f 55 52 43 45 20 32 30 30 38 30 39 4c 00 00 00 12 23 69 6e 63 6c _POSIX_C_SOURCE.200809L....#incl
3e40 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 ude.<stdio.h>....#include.<stdli
3e60 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 13 23 b.h>....#include.<string.h>....#
3e80 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c include.<unistd.h>....#include.<
3ea0 73 69 67 6e 61 6c 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 77 61 69 74 2e signal.h>....#include.<sys/wait.
3ec0 68 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 00 00 00 15 23 69 6e 63 h>....#include.<fcntl.h>....#inc
3ee0 6c 75 64 65 20 3c 68 69 73 74 65 64 69 74 2e 68 3e 00 00 00 00 00 00 00 20 73 74 61 74 69 63 20 lude.<histedit.h>........static.
3f00 76 6f 69 64 20 72 75 6e 5f 63 6d 64 28 63 68 61 72 20 2a 63 6d 64 29 20 7b 00 00 00 22 20 20 20 void.run_cmd(char.*cmd).{..."...
3f20 20 63 68 61 72 20 2a 61 72 67 73 5b 36 34 5d 2c 20 2a 74 6f 6b 65 6e 2c 20 2a 66 69 6c 65 3b 00 .char.*args[64],.*token,.*file;.
3f40 00 00 12 20 20 20 20 69 6e 74 20 69 20 3d 20 30 2c 20 66 64 3b 00 00 00 23 20 20 20 20 74 6f 6b .......int.i.=.0,.fd;...#....tok
3f60 65 6e 20 3d 20 73 74 72 74 6f 6b 28 63 6d 64 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 1d en.=.strtok(cmd,.".\t\n\r");....
3f80 20 20 20 20 77 68 69 6c 65 20 28 74 6f 6b 65 6e 20 26 26 20 69 20 3c 20 36 33 29 20 7b 00 00 00 ....while.(token.&&.i.<.63).{...
3fa0 26 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 63 6d 70 28 74 6f 6b 65 6e 2c 20 22 3e 22 29 20 &........if.(strcmp(token,.">").
3fc0 3d 3d 20 30 29 20 7b 00 00 00 2b 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 3d 20 73 74 ==.0).{...+............file.=.st
3fe0 72 74 6f 6b 28 4e 55 4c 4c 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 40 20 20 20 20 20 20 rtok(NULL,.".\t\n\r");...@......
4000 20 20 20 20 20 20 66 64 20 3d 20 6f 70 65 6e 28 66 69 6c 65 2c 20 4f 5f 57 52 4f 4e 4c 59 20 7c ......fd.=.open(file,.O_WRONLY.|
4020 20 4f 5f 43 52 45 41 54 20 7c 20 4f 5f 54 52 55 4e 43 2c 20 30 36 34 34 29 3b 00 00 00 24 20 20 .O_CREAT.|.O_TRUNC,.0644);...$..
4040 20 20 20 20 20 20 20 20 20 20 64 75 70 32 28 66 64 2c 20 53 54 44 4f 55 54 5f 46 49 4c 45 4e 4f ..........dup2(fd,.STDOUT_FILENO
4060 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 29 3b 00 00 00 21 );................close(fd);...!
4080 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 61 72 67 73 5b 69 2b 2b 5d 20 3d 20 74 6f 6b 65 6e ........}.else.args[i++].=.token
40a0 3b 00 00 00 28 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 4e 55 4c 4c ;...(........token.=.strtok(NULL
40c0 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 13 20 20 20 20 61 72 ,.".\t\n\r");........}........ar
40e0 67 73 5b 69 5d 20 3d 20 4e 55 4c 4c 3b 00 00 00 10 20 20 20 20 69 66 20 28 69 20 3e 20 30 29 20 gs[i].=.NULL;........if.(i.>.0).
4100 7b 00 00 00 1e 20 20 20 20 20 20 20 20 65 78 65 63 76 70 28 61 72 67 73 5b 30 5d 2c 20 61 72 67 {............execvp(args[0],.arg
4120 73 29 3b 00 00 00 10 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 00 00 00 05 20 20 20 20 7d s);............exit(1);........}
4140 00 00 00 01 7d 00 00 00 00 00 00 00 21 73 74 61 74 69 63 20 76 6f 69 64 20 65 78 65 63 75 74 65 ....}.......!static.void.execute
4160 28 63 68 61 72 20 2a 6c 69 6e 65 29 20 7b 00 00 00 27 20 20 20 20 69 66 20 28 73 74 72 6e 63 6d (char.*line).{...'....if.(strncm
4180 70 28 6c 69 6e 65 2c 20 22 63 64 20 22 2c 20 33 29 20 3d 3d 20 30 29 20 7b 00 00 00 18 20 20 20 p(line,."cd.",.3).==.0).{.......
41a0 20 20 20 20 20 63 68 64 69 72 28 6c 69 6e 65 20 2b 20 33 29 3b 00 00 00 32 20 20 20 20 7d 20 65 .....chdir(line.+.3);...2....}.e
41c0 6c 73 65 20 69 66 20 28 73 74 72 63 6d 70 28 6c 69 6e 65 2c 20 22 65 78 69 74 22 29 20 3d 3d 20 lse.if.(strcmp(line,."exit").==.
41e0 30 29 20 65 78 69 74 28 30 29 3b 00 00 00 0a 20 20 20 20 65 6c 73 65 20 7b 00 00 00 24 20 20 20 0).exit(0);........else.{...$...
4200 20 20 20 20 20 63 68 61 72 20 2a 70 20 3d 20 73 74 72 63 68 72 28 6c 69 6e 65 2c 20 27 7c 27 29 .....char.*p.=.strchr(line,.'|')
4220 3b 00 00 00 10 20 20 20 20 20 20 20 20 69 66 20 28 70 29 20 7b 00 00 00 20 20 20 20 20 20 20 20 ;............if.(p).{...........
4240 20 20 20 20 20 69 6e 74 20 66 64 5b 32 5d 3b 20 70 69 70 65 28 66 64 29 3b 00 00 00 1e 20 20 20 .....int.fd[2];.pipe(fd);.......
4260 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 3b 20 .........if.(fork().==.0).{...;.
4280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 75 70 32 28 66 64 5b 31 5d 2c 20 31 29 3b 20 63 ...............dup2(fd[1],.1);.c
42a0 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 1e 20 20 lose(fd[0]);.close(fd[1]);......
42c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 5f 63 6d 64 28 6c 69 6e 65 29 3b 00 00 00 0d ..............run_cmd(line);....
42e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 00 00 00 1e 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 ............}................if.
4300 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 (fork().==.0).{...;.............
4320 20 20 20 64 75 70 32 28 66 64 5b 30 5d 2c 20 30 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b ...dup2(fd[0],.0);.close(fd[0]);
4340 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 1f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .close(fd[1]);..................
4360 20 20 72 75 6e 5f 63 6d 64 28 70 20 2b 20 31 29 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 20 ..run_cmd(p.+.1);...............
4380 20 7d 00 00 00 27 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 .}...'............close(fd[0]);.
43a0 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 23 20 20 20 20 20 20 20 20 20 20 20 20 77 61 69 close(fd[1]);...#............wai
43c0 74 28 4e 55 4c 4c 29 3b 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 21 20 20 20 20 20 20 20 20 t(NULL);.wait(NULL);...!........
43e0 7d 20 65 6c 73 65 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 24 20 20 20 }.else.if.(fork().==.0).{...$...
4400 20 20 20 20 20 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 44 46 4c 29 .........signal(SIGINT,.SIG_DFL)
4420 3b 00 00 00 1a 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 5f 63 6d 64 28 6c 69 6e 65 29 3b 00 ;................run_cmd(line);.
4440 00 00 1a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 ...........}.else.wait(NULL);...
4460 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 57 73 74 61 74 69 63 20 63 68 61 72 20 2a .....}....}.......Wstatic.char.*
4480 67 65 74 5f 70 72 6f 6d 70 74 28 45 64 69 74 4c 69 6e 65 20 2a 65 29 20 7b 20 28 76 6f 69 64 29 get_prompt(EditLine.*e).{.(void)
44a0 65 3b 20 72 65 74 75 72 6e 20 28 67 65 74 75 69 64 28 29 20 3d 3d 20 30 29 20 3f 20 22 23 20 22 e;.return.(getuid().==.0).?."#."
44c0 20 3a 20 22 24 20 22 3b 20 7d 00 00 00 00 00 00 00 1c 76 6f 69 64 20 72 75 6e 5f 69 6e 74 65 72 .:."$.";.}........void.run_inter
44e0 61 63 74 69 76 65 28 76 6f 69 64 29 20 7b 00 00 00 38 20 20 20 20 45 64 69 74 4c 69 6e 65 20 2a active(void).{...8....EditLine.*
4500 65 6c 20 3d 20 65 6c 5f 69 6e 69 74 28 22 73 68 22 2c 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 el.=.el_init("sh",.stdin,.stdout
4520 2c 20 73 74 64 65 72 72 29 3b 00 00 00 23 20 20 20 20 48 69 73 74 6f 72 79 20 2a 68 69 73 74 20 ,.stderr);...#....History.*hist.
4540 3d 20 68 69 73 74 6f 72 79 5f 69 6e 69 74 28 29 3b 00 00 00 11 20 20 20 20 48 69 73 74 45 76 65 =.history_init();........HistEve
4560 6e 74 20 65 76 3b 00 00 00 27 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c nt.ev;...'....history(hist,.&ev,
4580 20 48 5f 53 45 54 53 49 5a 45 2c 20 31 30 30 29 3b 00 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 .H_SETSIZE,.100);...'....el_set(
45a0 65 6c 2c 20 45 4c 5f 48 49 53 54 2c 20 68 69 73 74 6f 72 79 2c 20 68 69 73 74 29 3b 00 00 00 26 el,.EL_HIST,.history,.hist);...&
45c0 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 50 52 4f 4d 50 54 2c 20 67 65 74 5f 70 72 ....el_set(el,.EL_PROMPT,.get_pr
45e0 6f 6d 70 74 29 3b 00 00 00 20 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 45 44 49 54 ompt);........el_set(el,.EL_EDIT
4600 4f 52 2c 20 22 76 69 22 29 3b 00 00 00 1c 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c OR,."vi");........signal(SIGINT,
4620 20 53 49 47 5f 49 47 4e 29 3b 00 00 00 15 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 .SIG_IGN);........const.char.*li
4640 6e 65 3b 00 00 00 0e 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 3b 00 00 00 32 20 20 20 20 77 68 69 ne;........int.count;...2....whi
4660 6c 65 20 28 28 6c 69 6e 65 20 3d 20 65 6c 5f 67 65 74 73 28 65 6c 2c 20 26 63 6f 75 6e 74 29 29 le.((line.=.el_gets(el,.&count))
4680 20 21 3d 20 4e 55 4c 4c 29 20 7b 00 00 00 18 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 .!=.NULL).{............if.(count
46a0 20 3e 20 31 29 20 7b 00 00 00 25 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 63 6d 64 .>.1).{...%............char.*cmd
46c0 20 3d 20 73 74 72 64 75 70 28 6c 69 6e 65 29 3b 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 .=.strdup(line);................
46e0 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e 65 history(hist,.&ev,.H_ENTER,.line
4700 29 3b 00 00 00 19 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 63 6d 64 29 3b 00 );................execute(cmd);.
4720 00 00 16 20 20 20 20 20 20 20 20 20 20 20 20 66 72 65 65 28 63 6d 64 29 3b 00 00 00 09 20 20 20 ...............free(cmd);.......
4740 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 22 20 20 20 20 65 6c 5f 65 6e 64 28 65 6c .....}........}..."....el_end(el
4760 29 3b 20 68 69 73 74 6f 72 79 5f 65 6e 64 28 68 69 73 74 29 3b 00 00 00 01 7d 00 00 00 00 00 00 );.history_end(hist);....}......
4780 00 1b 76 6f 69 64 20 72 75 6e 5f 73 63 72 69 70 74 28 46 49 4c 45 20 2a 66 70 29 20 7b 00 00 00 ..void.run_script(FILE.*fp).{...
47a0 14 20 20 20 20 63 68 61 72 20 6c 69 6e 65 5b 31 30 32 34 5d 3b 00 00 00 2b 20 20 20 20 77 68 69 .....char.line[1024];...+....whi
47c0 6c 65 20 28 66 67 65 74 73 28 6c 69 6e 65 2c 20 73 69 7a 65 6f 66 28 6c 69 6e 65 29 2c 20 66 70 le.(fgets(line,.sizeof(line),.fp
47e0 29 29 20 7b 00 00 00 2a 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 6e 65 5b 30 5d 20 21 3d 20 27 )).{...*........if.(line[0].!=.'
4800 23 27 29 20 65 78 65 63 75 74 65 28 6c 69 6e 65 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d #').execute(line);........}....}
4820 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 55 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 5...............U...............
4840 00 00 00 00 00 00 00 00 0d 09 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 0c ........................5._.....
4860 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 0d 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff ................................
4880 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
48a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
48c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
48e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
49a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
49c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d ..............................j]
49e0 33 9b 04 01 00 00 00 09 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 3...............................
4a00 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 .................5..............
4a20 00 00 00 00 00 00 00 00 00 58 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........X......................
4a40 00 70 09 00 00 00 00 00 00 35 81 5f d0 00 00 00 0d 00 00 00 0f 00 00 00 00 00 00 00 00 00 00 00 .p.......5._....................
4a60 0e 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4a80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
4bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 33 e5 04 01 00 00 00 00 00 f5 18 00 00 00 00 ...............j]3..............
4be0 00 00 00 02 00 00 00 00 00 00 00 59 00 00 00 1f 23 64 65 66 69 6e 65 20 5f 50 4f 53 49 58 5f 43 ...........Y....#define._POSIX_C
4c00 5f 53 4f 55 52 43 45 20 32 30 30 38 30 39 4c 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 _SOURCE.200809L....#include.<std
4c20 64 65 66 2e 68 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 00 00 00 13 def.h>....#include.<stdio.h>....
4c40 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 #include.<stdlib.h>....#include.
4c60 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 <string.h>....#include.<unistd.h
4c80 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 00 00 00 15 23 69 6e 63 >....#include.<signal.h>....#inc
4ca0 6c 75 64 65 20 3c 73 79 73 2f 77 61 69 74 2e 68 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 66 lude.<sys/wait.h>....#include.<f
4cc0 63 6e 74 6c 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 68 69 73 74 65 64 69 74 2e 68 3e cntl.h>....#include.<histedit.h>
4ce0 00 00 00 00 00 00 00 20 73 74 61 74 69 63 20 76 6f 69 64 20 72 75 6e 5f 63 6d 64 28 63 68 61 72 ........static.void.run_cmd(char
4d00 20 2a 63 6d 64 29 20 7b 00 00 00 22 20 20 20 20 63 68 61 72 20 2a 61 72 67 73 5b 36 34 5d 2c 20 .*cmd).{..."....char.*args[64],.
4d20 2a 74 6f 6b 65 6e 2c 20 2a 66 69 6c 65 3b 00 00 00 12 20 20 20 20 69 6e 74 20 69 20 3d 20 30 2c *token,.*file;........int.i.=.0,
4d40 20 66 64 3b 00 00 00 23 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 63 6d 64 2c 20 .fd;...#....token.=.strtok(cmd,.
4d60 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 1d 20 20 20 20 77 68 69 6c 65 20 28 74 6f 6b 65 6e 20 ".\t\n\r");........while.(token.
4d80 26 26 20 69 20 3c 20 36 33 29 20 7b 00 00 00 26 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 63 &&.i.<.63).{...&........if.(strc
4da0 6d 70 28 74 6f 6b 65 6e 2c 20 22 3e 22 29 20 3d 3d 20 30 29 20 7b 00 00 00 2b 20 20 20 20 20 20 mp(token,.">").==.0).{...+......
4dc0 20 20 20 20 20 20 66 69 6c 65 20 3d 20 73 74 72 74 6f 6b 28 4e 55 4c 4c 2c 20 22 20 5c 74 5c 6e ......file.=.strtok(NULL,.".\t\n
4de0 5c 72 22 29 3b 00 00 00 17 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65 29 20 7b \r");................if.(file).{
4e00 00 00 00 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 64 20 3d 20 6f 70 65 6e 28 66 69 ...D................fd.=.open(fi
4e20 6c 65 2c 20 4f 5f 57 52 4f 4e 4c 59 20 7c 20 4f 5f 43 52 45 41 54 20 7c 20 4f 5f 54 52 55 4e 43 le,.O_WRONLY.|.O_CREAT.|.O_TRUNC
4e40 2c 20 30 36 34 34 29 3b 00 00 00 28 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 75 70 32 ,.0644);...(................dup2
4e60 28 66 64 2c 20 53 54 44 4f 55 54 5f 46 49 4c 45 4e 4f 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 (fd,.STDOUT_FILENO);............
4e80 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 29 3b 00 00 00 0d 20 20 20 20 20 20 20 20 20 20 ........close(fd);..............
4ea0 20 20 7d 00 00 00 10 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 00 00 00 1e 20 20 20 20 20 ..}............}.else.{.........
4ec0 20 20 20 20 20 20 20 61 72 67 73 5b 69 2b 2b 5d 20 3d 20 74 6f 6b 65 6e 3b 00 00 00 09 20 20 20 .......args[i++].=.token;.......
4ee0 20 20 20 20 20 7d 00 00 00 28 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b .....}...(........token.=.strtok
4f00 28 4e 55 4c 4c 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 13 20 (NULL,.".\t\n\r");........}.....
4f20 20 20 20 61 72 67 73 5b 69 5d 20 3d 20 4e 55 4c 4c 3b 00 00 00 10 20 20 20 20 69 66 20 28 69 20 ...args[i].=.NULL;........if.(i.
4f40 3e 20 30 29 20 7b 00 00 00 1e 20 20 20 20 20 20 20 20 65 78 65 63 76 70 28 61 72 67 73 5b 30 5d >.0).{............execvp(args[0]
4f60 2c 20 61 72 67 73 29 3b 00 00 00 10 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 00 00 00 05 ,.args);............exit(1);....
4f80 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 1a 76 6f 69 64 20 65 78 65 63 75 74 65 28 63 ....}....}........void.execute(c
4fa0 68 61 72 20 2a 6c 69 6e 65 29 20 7b 00 00 00 0c 20 20 20 20 63 68 61 72 20 2a 70 3b 00 00 00 27 har.*line).{........char.*p;...'
4fc0 20 20 20 20 69 66 20 28 73 74 72 6e 63 6d 70 28 6c 69 6e 65 2c 20 22 63 64 20 22 2c 20 33 29 20 ....if.(strncmp(line,."cd.",.3).
4fe0 3d 3d 20 30 29 20 7b 00 00 00 28 20 20 20 20 20 20 20 20 6c 69 6e 65 5b 73 74 72 63 73 70 6e 28 ==.0).{...(........line[strcspn(
5000 6c 69 6e 65 2c 20 22 5c 6e 5c 72 22 29 5d 20 3d 20 30 3b 00 00 00 18 20 20 20 20 20 20 20 20 63 line,."\n\r")].=.0;............c
5020 68 64 69 72 28 6c 69 6e 65 20 2b 20 33 29 3b 00 00 00 51 20 20 20 20 7d 20 65 6c 73 65 20 69 66 hdir(line.+.3);...Q....}.else.if
5040 20 28 73 74 72 63 6d 70 28 6c 69 6e 65 2c 20 22 65 78 69 74 5c 6e 22 29 20 3d 3d 20 30 20 7c 7c .(strcmp(line,."exit\n").==.0.||
5060 20 73 74 72 63 6d 70 28 6c 69 6e 65 2c 20 22 65 78 69 74 22 29 20 3d 3d 20 30 29 20 65 78 69 74 .strcmp(line,."exit").==.0).exit
5080 28 30 29 3b 00 00 00 27 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 70 20 3d 20 73 74 72 63 68 72 (0);...'....else.if.((p.=.strchr
50a0 28 6c 69 6e 65 2c 20 27 7c 27 29 29 29 20 7b 00 00 00 1c 20 20 20 20 20 20 20 20 69 6e 74 20 66 (line,.'|'))).{............int.f
50c0 64 5b 32 5d 3b 20 70 69 70 65 28 66 64 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 69 66 20 28 66 d[2];.pipe(fd);............if.(f
50e0 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 37 20 20 20 20 20 20 20 20 20 20 20 20 64 75 70 ork().==.0).{...7............dup
5100 32 28 66 64 5b 31 5d 2c 20 31 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 2(fd[1],.1);.close(fd[0]);.close
5120 28 66 64 5b 31 5d 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 5f 63 6d 64 28 (fd[1]);................run_cmd(
5140 6c 69 6e 65 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 1a 20 20 20 20 20 20 20 20 69 line);............}............i
5160 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 37 20 20 20 20 20 20 20 20 20 20 20 f.(fork().==.0).{...7...........
5180 20 64 75 70 32 28 66 64 5b 30 5d 2c 20 30 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 .dup2(fd[0],.0);.close(fd[0]);.c
51a0 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 1b 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 5f lose(fd[1]);................run_
51c0 63 6d 64 28 70 20 2b 20 31 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 23 20 20 20 20 cmd(p.+.1);............}...#....
51e0 20 20 20 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 ....close(fd[0]);.close(fd[1]);.
5200 00 00 1f 20 20 20 20 20 20 20 20 77 61 69 74 28 4e 55 4c 4c 29 3b 20 77 61 69 74 28 4e 55 4c 4c ...........wait(NULL);.wait(NULL
5220 29 3b 00 00 00 1d 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 );........}.else.if.(fork().==.0
5240 29 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 ).{............signal(SIGINT,.SI
5260 47 5f 44 46 4c 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 72 75 6e 5f 63 6d 64 28 6c 69 6e 65 29 G_DFL);............run_cmd(line)
5280 3b 00 00 00 16 20 20 20 20 7d 20 65 6c 73 65 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 01 7d ;........}.else.wait(NULL);....}
52a0 00 00 00 00 00 00 00 57 73 74 61 74 69 63 20 63 68 61 72 20 2a 67 65 74 5f 70 72 6f 6d 70 74 28 .......Wstatic.char.*get_prompt(
52c0 45 64 69 74 4c 69 6e 65 20 2a 65 29 20 7b 20 28 76 6f 69 64 29 65 3b 20 72 65 74 75 72 6e 20 28 EditLine.*e).{.(void)e;.return.(
52e0 67 65 74 75 69 64 28 29 20 3d 3d 20 30 29 20 3f 20 22 23 20 22 20 3a 20 22 24 20 22 3b 20 7d 00 getuid().==.0).?."#.".:."$.";.}.
5300 00 00 00 00 00 00 1c 76 6f 69 64 20 72 75 6e 5f 69 6e 74 65 72 61 63 74 69 76 65 28 76 6f 69 64 .......void.run_interactive(void
5320 29 20 7b 00 00 00 38 20 20 20 20 45 64 69 74 4c 69 6e 65 20 2a 65 6c 20 3d 20 65 6c 5f 69 6e 69 ).{...8....EditLine.*el.=.el_ini
5340 74 28 22 73 68 22 2c 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 72 29 3b 00 t("sh",.stdin,.stdout,.stderr);.
5360 00 00 23 20 20 20 20 48 69 73 74 6f 72 79 20 2a 68 69 73 74 20 3d 20 68 69 73 74 6f 72 79 5f 69 ..#....History.*hist.=.history_i
5380 6e 69 74 28 29 3b 00 00 00 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 3b 00 00 00 15 20 nit();........HistEvent.ev;.....
53a0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 6e 65 3b 00 00 00 0e 20 20 20 20 69 6e 74 20 ...const.char.*line;........int.
53c0 63 6f 75 6e 74 3b 00 00 00 27 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c count;...'....history(hist,.&ev,
53e0 20 48 5f 53 45 54 53 49 5a 45 2c 20 31 30 30 29 3b 00 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 .H_SETSIZE,.100);...'....el_set(
5400 65 6c 2c 20 45 4c 5f 48 49 53 54 2c 20 68 69 73 74 6f 72 79 2c 20 68 69 73 74 29 3b 00 00 00 26 el,.EL_HIST,.history,.hist);...&
5420 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 50 52 4f 4d 50 54 2c 20 67 65 74 5f 70 72 ....el_set(el,.EL_PROMPT,.get_pr
5440 6f 6d 70 74 29 3b 00 00 00 20 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 45 44 49 54 ompt);........el_set(el,.EL_EDIT
5460 4f 52 2c 20 22 76 69 22 29 3b 00 00 00 1c 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c OR,."vi");........signal(SIGINT,
5480 20 53 49 47 5f 49 47 4e 29 3b 00 00 00 32 20 20 20 20 77 68 69 6c 65 20 28 28 6c 69 6e 65 20 3d .SIG_IGN);...2....while.((line.=
54a0 20 65 6c 5f 67 65 74 73 28 65 6c 2c 20 26 63 6f 75 6e 74 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b .el_gets(el,.&count)).!=.NULL).{
54c0 00 00 00 18 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 31 29 20 7b 00 00 00 25 ............if.(count.>.1).{...%
54e0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 63 6d 64 20 3d 20 73 74 72 64 75 70 28 6c ............char.*cmd.=.strdup(l
5500 69 6e 65 29 3b 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 ine);................history(his
5520 74 2c 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e 65 29 3b 00 00 00 19 20 20 20 20 20 t,.&ev,.H_ENTER,.line);.........
5540 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 63 6d 64 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 .......execute(cmd);............
5560 20 20 20 20 66 72 65 65 28 63 6d 64 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 ....free(cmd);............}.....
5580 20 20 20 7d 00 00 00 22 20 20 20 20 65 6c 5f 65 6e 64 28 65 6c 29 3b 20 68 69 73 74 6f 72 79 5f ...}..."....el_end(el);.history_
55a0 65 6e 64 28 68 69 73 74 29 3b 00 00 00 01 7d 00 00 00 00 00 00 00 1b 76 6f 69 64 20 72 75 6e 5f end(hist);....}........void.run_
55c0 73 63 72 69 70 74 28 46 49 4c 45 20 2a 66 70 29 20 7b 00 00 00 14 20 20 20 20 63 68 61 72 20 6c script(FILE.*fp).{........char.l
55e0 69 6e 65 5b 31 30 32 34 5d 3b 00 00 00 2b 20 20 20 20 77 68 69 6c 65 20 28 66 67 65 74 73 28 6c ine[1024];...+....while.(fgets(l
5600 69 6e 65 2c 20 73 69 7a 65 6f 66 28 6c 69 6e 65 29 2c 20 66 70 29 29 20 7b 00 00 00 3d 20 20 20 ine,.sizeof(line),.fp)).{...=...
5620 20 20 20 20 20 69 66 20 28 6c 69 6e 65 5b 30 5d 20 21 3d 20 27 23 27 20 26 26 20 6c 69 6e 65 5b .....if.(line[0].!=.'#'.&&.line[
5640 30 5d 20 21 3d 20 27 5c 6e 27 29 20 65 78 65 63 75 74 65 28 6c 69 6e 65 29 3b 00 00 00 05 20 20 0].!=.'\n').execute(line);......
5660 20 20 7d 00 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 59 00 00 00 00 00 00 00 ..}....}5...............Y.......
5680 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 71 09 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................q...............
56a0 35 81 5f d0 00 00 00 0e 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 0f 00 00 00 01 00 00 00 00 5._.............................
56c0 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
56e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
57a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
57c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
57e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5820 00 00 00 00 00 00 6a 5d 33 e5 04 01 00 00 00 0a 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 ......j]3.......................
5840 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 .........................5......
5860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5b 00 00 00 01 00 00 00 00 00 00 00 00 00 00 .................[..............
5880 00 00 00 00 00 00 00 00 00 74 09 00 00 00 00 00 00 35 81 5f d0 00 00 00 0f 00 00 00 11 00 00 00 .........t.......5._............
58a0 00 00 00 00 00 00 00 00 10 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 ................................
58c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
58e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
59a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
59c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
59e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
5a00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 34 2b 04 01 00 00 00 .......................j]4+.....
5a20 00 00 f5 18 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 5c 00 00 00 1f 23 64 65 66 69 6e 65 20 ...................\....#define.
5a40 5f 50 4f 53 49 58 5f 43 5f 53 4f 55 52 43 45 20 32 30 30 38 30 39 4c 00 00 00 13 23 69 6e 63 6c _POSIX_C_SOURCE.200809L....#incl
5a60 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 ude.<stddef.h>....#include.<stdi
5a80 6f 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 o.h>....#include.<stdlib.h>....#
5aa0 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c include.<string.h>....#include.<
5ac0 75 6e 69 73 74 64 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e unistd.h>....#include.<signal.h>
5ae0 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 77 61 69 74 2e 68 3e 00 00 00 12 23 69 6e ....#include.<sys/wait.h>....#in
5b00 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 68 69 73 clude.<fcntl.h>....#include.<his
5b20 74 65 64 69 74 2e 68 3e 00 00 00 00 00 00 00 20 73 74 61 74 69 63 20 76 6f 69 64 20 72 75 6e 5f tedit.h>........static.void.run_
5b40 63 6d 64 28 63 68 61 72 20 2a 63 6d 64 29 20 7b 00 00 00 1b 20 20 20 20 63 68 61 72 20 2a 61 72 cmd(char.*cmd).{........char.*ar
5b60 67 73 5b 36 34 5d 2c 20 2a 74 6f 6b 65 6e 3b 00 00 00 12 20 20 20 20 69 6e 74 20 69 20 3d 20 30 gs[64],.*token;........int.i.=.0
5b80 2c 20 66 64 3b 00 00 00 1f 20 20 20 20 63 68 61 72 20 2a 70 20 3d 20 73 74 72 73 74 72 28 63 6d ,.fd;........char.*p.=.strstr(cm
5ba0 64 2c 20 22 3e 22 29 3b 00 00 00 0c 20 20 20 20 69 66 20 28 70 29 20 7b 00 00 00 12 20 20 20 20 d,.">");........if.(p).{........
5bc0 20 20 20 20 2a 70 20 3d 20 27 5c 30 27 3b 00 00 00 2e 20 20 20 20 20 20 20 20 63 68 61 72 20 2a ....*p.=.'\0';............char.*
5be0 66 69 6c 65 20 3d 20 73 74 72 74 6f 6b 28 70 20 2b 20 31 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b file.=.strtok(p.+.1,.".\t\n\r");
5c00 00 00 00 3c 20 20 20 20 20 20 20 20 66 64 20 3d 20 6f 70 65 6e 28 66 69 6c 65 2c 20 4f 5f 57 52 ...<........fd.=.open(file,.O_WR
5c20 4f 4e 4c 59 20 7c 20 4f 5f 43 52 45 41 54 20 7c 20 4f 5f 54 52 55 4e 43 2c 20 30 36 34 34 29 3b ONLY.|.O_CREAT.|.O_TRUNC,.0644);
5c40 00 00 00 20 20 20 20 20 20 20 20 20 64 75 70 32 28 66 64 2c 20 53 54 44 4f 55 54 5f 46 49 4c 45 ............dup2(fd,.STDOUT_FILE
5c60 4e 4f 29 3b 00 00 00 12 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 29 3b 00 00 00 05 20 20 NO);............close(fd);......
5c80 20 20 7d 00 00 00 23 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 63 6d 64 2c 20 22 ..}...#....token.=.strtok(cmd,."
5ca0 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 1d 20 20 20 20 77 68 69 6c 65 20 28 74 6f 6b 65 6e 20 26 .\t\n\r");........while.(token.&
5cc0 26 20 69 20 3c 20 36 33 29 20 7b 00 00 00 1a 20 20 20 20 20 20 20 20 61 72 67 73 5b 69 2b 2b 5d &.i.<.63).{............args[i++]
5ce0 20 3d 20 74 6f 6b 65 6e 3b 00 00 00 28 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 .=.token;...(........token.=.str
5d00 74 6f 6b 28 4e 55 4c 4c 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 05 20 20 20 20 7d 00 00 tok(NULL,.".\t\n\r");........}..
5d20 00 13 20 20 20 20 61 72 67 73 5b 69 5d 20 3d 20 4e 55 4c 4c 3b 00 00 00 10 20 20 20 20 69 66 20 ......args[i].=.NULL;........if.
5d40 28 69 20 3e 20 30 29 20 7b 00 00 00 1e 20 20 20 20 20 20 20 20 65 78 65 63 76 70 28 61 72 67 73 (i.>.0).{............execvp(args
5d60 5b 30 5d 2c 20 61 72 67 73 29 3b 00 00 00 10 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29 3b 00 [0],.args);............exit(1);.
5d80 00 00 05 20 20 20 20 7d 00 00 00 01 7d 00 00 00 00 00 00 00 1a 76 6f 69 64 20 65 78 65 63 75 74 .......}....}........void.execut
5da0 65 28 63 68 61 72 20 2a 6c 69 6e 65 29 20 7b 00 00 00 0c 20 20 20 20 63 68 61 72 20 2a 70 3b 00 e(char.*line).{........char.*p;.
5dc0 00 00 27 20 20 20 20 69 66 20 28 73 74 72 6e 63 6d 70 28 6c 69 6e 65 2c 20 22 63 64 20 22 2c 20 ..'....if.(strncmp(line,."cd.",.
5de0 33 29 20 3d 3d 20 30 29 20 7b 00 00 00 28 20 20 20 20 20 20 20 20 6c 69 6e 65 5b 73 74 72 63 73 3).==.0).{...(........line[strcs
5e00 70 6e 28 6c 69 6e 65 2c 20 22 5c 6e 5c 72 22 29 5d 20 3d 20 30 3b 00 00 00 18 20 20 20 20 20 20 pn(line,."\n\r")].=.0;..........
5e20 20 20 63 68 64 69 72 28 6c 69 6e 65 20 2b 20 33 29 3b 00 00 00 51 20 20 20 20 7d 20 65 6c 73 65 ..chdir(line.+.3);...Q....}.else
5e40 20 69 66 20 28 73 74 72 63 6d 70 28 6c 69 6e 65 2c 20 22 65 78 69 74 5c 6e 22 29 20 3d 3d 20 30 .if.(strcmp(line,."exit\n").==.0
5e60 20 7c 7c 20 73 74 72 63 6d 70 28 6c 69 6e 65 2c 20 22 65 78 69 74 22 29 20 3d 3d 20 30 29 20 65 .||.strcmp(line,."exit").==.0).e
5e80 78 69 74 28 30 29 3b 00 00 00 27 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 70 20 3d 20 73 74 72 xit(0);...'....else.if.((p.=.str
5ea0 63 68 72 28 6c 69 6e 65 2c 20 27 7c 27 29 29 29 20 7b 00 00 00 12 20 20 20 20 20 20 20 20 69 6e chr(line,.'|'))).{............in
5ec0 74 20 66 64 5b 32 5d 3b 00 00 00 12 20 20 20 20 20 20 20 20 2a 70 20 3d 20 27 5c 30 27 3b 00 00 t.fd[2];............*p.=.'\0';..
5ee0 00 11 20 20 20 20 20 20 20 20 70 69 70 65 28 66 64 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 69 ..........pipe(fd);............i
5f00 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 37 20 20 20 20 20 20 20 20 20 20 20 f.(fork().==.0).{...7...........
5f20 20 64 75 70 32 28 66 64 5b 31 5d 2c 20 31 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 .dup2(fd[1],.1);.close(fd[0]);.c
5f40 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 1a 20 20 20 20 20 20 20 20 20 20 20 20 72 75 6e 5f lose(fd[1]);................run_
5f60 63 6d 64 28 6c 69 6e 65 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 1a 20 20 20 20 20 cmd(line);............}.........
5f80 20 20 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b 00 00 00 37 20 20 20 20 20 20 20 ...if.(fork().==.0).{...7.......
5fa0 20 20 20 20 20 64 75 70 32 28 66 64 5b 30 5d 2c 20 30 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d .....dup2(fd[0],.0);.close(fd[0]
5fc0 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 00 00 00 1b 20 20 20 20 20 20 20 20 20 20 20 20 );.close(fd[1]);................
5fe0 72 75 6e 5f 63 6d 64 28 70 20 2b 20 31 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 23 run_cmd(p.+.1);............}...#
6000 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 ........close(fd[0]);.close(fd[1
6020 5d 29 3b 00 00 00 1f 20 20 20 20 20 20 20 20 77 61 69 74 28 4e 55 4c 4c 29 3b 20 77 61 69 74 28 ]);............wait(NULL);.wait(
6040 4e 55 4c 4c 29 3b 00 00 00 1d 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 66 6f 72 6b 28 29 20 NULL);........}.else.if.(fork().
6060 3d 3d 20 30 29 20 7b 00 00 00 20 20 20 20 20 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 ==.0).{............signal(SIGINT
6080 2c 20 53 49 47 5f 44 46 4c 29 3b 00 00 00 16 20 20 20 20 20 20 20 20 72 75 6e 5f 63 6d 64 28 6c ,.SIG_DFL);............run_cmd(l
60a0 69 6e 65 29 3b 00 00 00 16 20 20 20 20 7d 20 65 6c 73 65 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 ine);........}.else.wait(NULL);.
60c0 00 00 01 7d 00 00 00 00 00 00 00 57 73 74 61 74 69 63 20 63 68 61 72 20 2a 67 65 74 5f 70 72 6f ...}.......Wstatic.char.*get_pro
60e0 6d 70 74 28 45 64 69 74 4c 69 6e 65 20 2a 65 29 20 7b 20 28 76 6f 69 64 29 65 3b 20 72 65 74 75 mpt(EditLine.*e).{.(void)e;.retu
6100 72 6e 20 28 67 65 74 75 69 64 28 29 20 3d 3d 20 30 29 20 3f 20 22 23 20 22 20 3a 20 22 24 20 22 rn.(getuid().==.0).?."#.".:."$."
6120 3b 20 7d 00 00 00 00 00 00 00 1c 76 6f 69 64 20 72 75 6e 5f 69 6e 74 65 72 61 63 74 69 76 65 28 ;.}........void.run_interactive(
6140 76 6f 69 64 29 20 7b 00 00 00 38 20 20 20 20 45 64 69 74 4c 69 6e 65 20 2a 65 6c 20 3d 20 65 6c void).{...8....EditLine.*el.=.el
6160 5f 69 6e 69 74 28 22 73 68 22 2c 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 _init("sh",.stdin,.stdout,.stder
6180 72 29 3b 00 00 00 23 20 20 20 20 48 69 73 74 6f 72 79 20 2a 68 69 73 74 20 3d 20 68 69 73 74 6f r);...#....History.*hist.=.histo
61a0 72 79 5f 69 6e 69 74 28 29 3b 00 00 00 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 3b 00 ry_init();........HistEvent.ev;.
61c0 00 00 15 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 6e 65 3b 00 00 00 0e 20 20 20 20 .......const.char.*line;........
61e0 69 6e 74 20 63 6f 75 6e 74 3b 00 00 00 27 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 int.count;...'....history(hist,.
6200 26 65 76 2c 20 48 5f 53 45 54 53 49 5a 45 2c 20 31 30 30 29 3b 00 00 00 27 20 20 20 20 65 6c 5f &ev,.H_SETSIZE,.100);...'....el_
6220 73 65 74 28 65 6c 2c 20 45 4c 5f 48 49 53 54 2c 20 68 69 73 74 6f 72 79 2c 20 68 69 73 74 29 3b set(el,.EL_HIST,.history,.hist);
6240 00 00 00 26 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 50 52 4f 4d 50 54 2c 20 67 65 ...&....el_set(el,.EL_PROMPT,.ge
6260 74 5f 70 72 6f 6d 70 74 29 3b 00 00 00 20 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f t_prompt);........el_set(el,.EL_
6280 45 44 49 54 4f 52 2c 20 22 76 69 22 29 3b 00 00 00 1c 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 EDITOR,."vi");........signal(SIG
62a0 49 4e 54 2c 20 53 49 47 5f 49 47 4e 29 3b 00 00 00 32 20 20 20 20 77 68 69 6c 65 20 28 28 6c 69 INT,.SIG_IGN);...2....while.((li
62c0 6e 65 20 3d 20 65 6c 5f 67 65 74 73 28 65 6c 2c 20 26 63 6f 75 6e 74 29 29 20 21 3d 20 4e 55 4c ne.=.el_gets(el,.&count)).!=.NUL
62e0 4c 29 20 7b 00 00 00 18 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 31 29 20 7b L).{............if.(count.>.1).{
6300 00 00 00 25 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 63 6d 64 20 3d 20 73 74 72 64 ...%............char.*cmd.=.strd
6320 75 70 28 6c 69 6e 65 29 3b 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 up(line);................history
6340 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e 65 29 3b 00 00 00 19 20 (hist,.&ev,.H_ENTER,.line);.....
6360 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 63 6d 64 29 3b 00 00 00 16 20 20 20 20 ...........execute(cmd);........
6380 20 20 20 20 20 20 20 20 66 72 65 65 28 63 6d 64 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 ........free(cmd);............}.
63a0 00 00 05 20 20 20 20 7d 00 00 00 22 20 20 20 20 65 6c 5f 65 6e 64 28 65 6c 29 3b 20 68 69 73 74 .......}..."....el_end(el);.hist
63c0 6f 72 79 5f 65 6e 64 28 68 69 73 74 29 3b 00 00 00 01 7d 00 00 00 00 00 00 00 1b 76 6f 69 64 20 ory_end(hist);....}........void.
63e0 72 75 6e 5f 73 63 72 69 70 74 28 46 49 4c 45 20 2a 66 70 29 20 7b 00 00 00 14 20 20 20 20 63 68 run_script(FILE.*fp).{........ch
6400 61 72 20 6c 69 6e 65 5b 31 30 32 34 5d 3b 00 00 00 2b 20 20 20 20 77 68 69 6c 65 20 28 66 67 65 ar.line[1024];...+....while.(fge
6420 74 73 28 6c 69 6e 65 2c 20 73 69 7a 65 6f 66 28 6c 69 6e 65 29 2c 20 66 70 29 29 20 7b 00 00 00 ts(line,.sizeof(line),.fp)).{...
6440 43 20 20 20 20 20 20 20 20 69 66 20 28 6c 69 6e 65 5b 30 5d 20 21 3d 20 27 23 27 20 26 26 20 6c C........if.(line[0].!=.'#'.&&.l
6460 69 6e 65 5b 30 5d 20 21 3d 20 27 5c 6e 27 20 26 26 20 6c 69 6e 65 5b 30 5d 20 21 3d 20 27 5c 72 ine[0].!=.'\n'.&&.line[0].!=.'\r
6480 27 29 20 7b 00 00 00 1a 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 6c 69 6e 65 ').{................execute(line
64a0 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 05 20 20 20 20 7d 00 00 00 01 7d 35 81 f5 );............}........}....}5..
64c0 18 00 00 00 00 00 00 00 00 00 00 00 00 5c 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 .............\..................
64e0 00 00 00 00 00 75 09 00 00 00 00 00 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 10 00 00 00 .....u...............5._........
6500 12 00 00 00 00 00 00 00 00 00 00 00 11 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 00 ................................
6520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
65a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
65c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
65e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 34 2b 04 ...........................j]4+.
6680 01 00 00 00 0b 00 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 ................................
66a0 00 01 00 00 00 00 00 00 00 00 00 00 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..............5.................
66c0 00 00 00 00 00 00 47 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0f 09 ......G.........................
66e0 00 00 00 00 00 00 35 81 5f d0 00 00 00 11 00 00 00 13 00 00 00 00 00 00 00 00 00 00 00 12 00 00 ......5._.......................
6700 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
67a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
67c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
67e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6860 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 34 8d 04 01 00 00 00 00 00 f5 18 00 00 00 00 00 00 00 ............j]4.................
6880 02 00 00 00 00 00 00 00 48 00 00 00 1f 23 64 65 66 69 6e 65 20 5f 50 4f 53 49 58 5f 43 5f 53 4f ........H....#define._POSIX_C_SO
68a0 55 52 43 45 20 32 30 30 38 30 39 4c 00 00 00 12 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e URCE.200809L....#include.<stdio.
68c0 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 00 00 00 13 23 69 6e h>....#include.<stdlib.h>....#in
68e0 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 75 6e clude.<string.h>....#include.<un
6900 69 73 74 64 2e 68 3e 00 00 00 13 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 00 00 istd.h>....#include.<signal.h>..
6920 00 15 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 77 61 69 74 2e 68 3e 00 00 00 12 23 69 6e 63 6c ..#include.<sys/wait.h>....#incl
6940 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 00 00 00 15 23 69 6e 63 6c 75 64 65 20 3c 68 69 73 74 65 ude.<fcntl.h>....#include.<histe
6960 64 69 74 2e 68 3e 00 00 00 11 23 69 6e 63 6c 75 64 65 20 3c 67 6c 6f 62 2e 68 3e 00 00 00 00 00 dit.h>....#include.<glob.h>.....
6980 00 00 57 73 74 61 74 69 63 20 63 68 61 72 20 2a 67 65 74 5f 70 72 6f 6d 70 74 28 45 64 69 74 4c ..Wstatic.char.*get_prompt(EditL
69a0 69 6e 65 20 2a 65 29 20 7b 20 28 76 6f 69 64 29 65 3b 20 72 65 74 75 72 6e 20 28 67 65 74 75 69 ine.*e).{.(void)e;.return.(getui
69c0 64 28 29 20 3d 3d 20 30 29 20 3f 20 22 23 20 22 20 3a 20 22 24 20 22 3b 20 7d 00 00 00 00 00 00 d().==.0).?."#.".:."$.";.}......
69e0 00 20 73 74 61 74 69 63 20 76 6f 69 64 20 72 75 6e 5f 63 6d 64 28 63 68 61 72 20 2a 63 6d 64 29 ..static.void.run_cmd(char.*cmd)
6a00 20 7b 00 00 00 22 20 20 20 20 63 68 61 72 20 2a 61 72 67 73 5b 36 34 5d 2c 20 2a 74 6f 6b 65 6e .{..."....char.*args[64],.*token
6a20 2c 20 2a 66 69 6c 65 3b 00 00 00 12 20 20 20 20 69 6e 74 20 69 20 3d 20 30 2c 20 66 64 3b 00 00 ,.*file;........int.i.=.0,.fd;..
6a40 00 0d 20 20 20 20 67 6c 6f 62 5f 74 20 67 3b 00 00 00 1f 20 20 20 20 63 68 61 72 20 2a 70 20 3d ......glob_t.g;........char.*p.=
6a60 20 73 74 72 73 74 72 28 63 6d 64 2c 20 22 3e 22 29 3b 00 00 00 0c 20 20 20 20 69 66 20 28 70 29 .strstr(cmd,.">");........if.(p)
6a80 20 7b 00 00 00 12 20 20 20 20 20 20 20 20 2a 70 20 3d 20 27 5c 30 27 3b 00 00 00 28 20 20 20 20 .{............*p.=.'\0';...(....
6aa0 20 20 20 20 66 69 6c 65 20 3d 20 73 74 72 74 6f 6b 28 70 20 2b 20 31 2c 20 22 20 5c 74 5c 6e 5c ....file.=.strtok(p.+.1,.".\t\n\
6ac0 72 22 29 3b 00 00 00 3c 20 20 20 20 20 20 20 20 66 64 20 3d 20 6f 70 65 6e 28 66 69 6c 65 2c 20 r");...<........fd.=.open(file,.
6ae0 4f 5f 57 52 4f 4e 4c 59 20 7c 20 4f 5f 43 52 45 41 54 20 7c 20 4f 5f 54 52 55 4e 43 2c 20 30 36 O_WRONLY.|.O_CREAT.|.O_TRUNC,.06
6b00 34 34 29 3b 00 00 00 20 20 20 20 20 20 20 20 20 64 75 70 32 28 66 64 2c 20 53 54 44 4f 55 54 5f 44);............dup2(fd,.STDOUT_
6b20 46 49 4c 45 4e 4f 29 3b 00 00 00 12 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 29 3b 00 00 FILENO);............close(fd);..
6b40 00 05 20 20 20 20 7d 00 00 00 23 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 63 6d ......}...#....token.=.strtok(cm
6b60 64 2c 20 22 20 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 1d 20 20 20 20 77 68 69 6c 65 20 28 74 6f 6b d,.".\t\n\r");........while.(tok
6b80 65 6e 20 26 26 20 69 20 3c 20 36 33 29 20 7b 00 00 00 44 20 20 20 20 20 20 20 20 69 66 20 28 67 en.&&.i.<.63).{...D........if.(g
6ba0 6c 6f 62 28 74 6f 6b 65 6e 2c 20 47 4c 4f 42 5f 4e 4f 43 48 45 43 4b 20 7c 20 47 4c 4f 42 5f 54 lob(token,.GLOB_NOCHECK.|.GLOB_T
6bc0 49 4c 44 45 2c 20 4e 55 4c 4c 2c 20 26 67 29 20 3d 3d 20 30 29 20 7b 00 00 00 60 20 20 20 20 20 ILDE,.NULL,.&g).==.0).{...`.....
6be0 20 20 20 20 20 20 20 66 6f 72 20 28 73 69 7a 65 5f 74 20 6a 20 3d 20 30 3b 20 6a 20 3c 20 67 2e .......for.(size_t.j.=.0;.j.<.g.
6c00 67 6c 5f 70 61 74 68 63 20 26 26 20 69 20 3c 20 36 33 3b 20 6a 2b 2b 29 20 61 72 67 73 5b 69 2b gl_pathc.&&.i.<.63;.j++).args[i+
6c20 2b 5d 20 3d 20 73 74 72 64 75 70 28 67 2e 67 6c 5f 70 61 74 68 76 5b 6a 5d 29 3b 00 00 00 19 20 +].=.strdup(g.gl_pathv[j]);.....
6c40 20 20 20 20 20 20 20 20 20 20 20 67 6c 6f 62 66 72 65 65 28 26 67 29 3b 00 00 00 21 20 20 20 20 ...........globfree(&g);...!....
6c60 20 20 20 20 7d 20 65 6c 73 65 20 61 72 67 73 5b 69 2b 2b 5d 20 3d 20 74 6f 6b 65 6e 3b 00 00 00 ....}.else.args[i++].=.token;...
6c80 28 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 20 3d 20 73 74 72 74 6f 6b 28 4e 55 4c 4c 2c 20 22 20 (........token.=.strtok(NULL,.".
6ca0 5c 74 5c 6e 5c 72 22 29 3b 00 00 00 05 20 20 20 20 7d 00 00 00 13 20 20 20 20 61 72 67 73 5b 69 \t\n\r");........}........args[i
6cc0 5d 20 3d 20 4e 55 4c 4c 3b 00 00 00 32 20 20 20 20 69 66 20 28 69 20 3e 20 30 29 20 7b 20 65 78 ].=.NULL;...2....if.(i.>.0).{.ex
6ce0 65 63 76 70 28 61 72 67 73 5b 30 5d 2c 20 61 72 67 73 29 3b 20 65 78 69 74 28 31 29 3b 20 7d 00 ecvp(args[0],.args);.exit(1);.}.
6d00 00 00 01 7d 00 00 00 00 00 00 00 1a 76 6f 69 64 20 65 78 65 63 75 74 65 28 63 68 61 72 20 2a 6c ...}........void.execute(char.*l
6d20 69 6e 65 29 20 7b 00 00 00 0c 20 20 20 20 63 68 61 72 20 2a 70 3b 00 00 00 27 20 20 20 20 69 66 ine).{........char.*p;...'....if
6d40 20 28 73 74 72 6e 63 6d 70 28 6c 69 6e 65 2c 20 22 63 64 20 22 2c 20 33 29 20 3d 3d 20 30 29 20 .(strncmp(line,."cd.",.3).==.0).
6d60 7b 00 00 00 39 20 20 20 20 20 20 20 20 6c 69 6e 65 5b 73 74 72 63 73 70 6e 28 6c 69 6e 65 2c 20 {...9........line[strcspn(line,.
6d80 22 5c 6e 5c 72 22 29 5d 20 3d 20 30 3b 20 63 68 64 69 72 28 6c 69 6e 65 20 2b 20 33 29 3b 00 00 "\n\r")].=.0;.chdir(line.+.3);..
6da0 00 51 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73 74 72 63 6d 70 28 6c 69 6e 65 2c 20 22 65 .Q....}.else.if.(strcmp(line,."e
6dc0 78 69 74 5c 6e 22 29 20 3d 3d 20 30 20 7c 7c 20 73 74 72 63 6d 70 28 6c 69 6e 65 2c 20 22 65 78 xit\n").==.0.||.strcmp(line,."ex
6de0 69 74 22 29 20 3d 3d 20 30 29 20 65 78 69 74 28 30 29 3b 00 00 00 27 20 20 20 20 65 6c 73 65 20 it").==.0).exit(0);...'....else.
6e00 69 66 20 28 28 70 20 3d 20 73 74 72 63 68 72 28 6c 69 6e 65 2c 20 27 7c 27 29 29 29 20 7b 00 00 if.((p.=.strchr(line,.'|'))).{..
6e20 00 27 20 20 20 20 20 20 20 20 69 6e 74 20 66 64 5b 32 5d 3b 20 2a 70 20 3d 20 27 5c 30 27 3b 20 .'........int.fd[2];.*p.=.'\0';.
6e40 70 69 70 65 28 66 64 29 3b 00 00 00 57 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 6b 28 29 20 pipe(fd);...W........if.(fork().
6e60 3d 3d 20 30 29 20 7b 20 64 75 70 32 28 66 64 5b 31 5d 2c 20 31 29 3b 20 63 6c 6f 73 65 28 66 64 ==.0).{.dup2(fd[1],.1);.close(fd
6e80 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 20 72 75 6e 5f 63 6d 64 28 6c 69 6e 65 [0]);.close(fd[1]);.run_cmd(line
6ea0 29 3b 20 7d 00 00 00 58 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 );.}...X........if.(fork().==.0)
6ec0 20 7b 20 64 75 70 32 28 66 64 5b 30 5d 2c 20 30 29 3b 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b .{.dup2(fd[0],.0);.close(fd[0]);
6ee0 20 63 6c 6f 73 65 28 66 64 5b 31 5d 29 3b 20 72 75 6e 5f 63 6d 64 28 70 20 2b 20 31 29 3b 20 7d .close(fd[1]);.run_cmd(p.+.1);.}
6f00 00 00 00 3b 20 20 20 20 20 20 20 20 63 6c 6f 73 65 28 66 64 5b 30 5d 29 3b 20 63 6c 6f 73 65 28 ...;........close(fd[0]);.close(
6f20 66 64 5b 31 5d 29 3b 20 77 61 69 74 28 4e 55 4c 4c 29 3b 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 fd[1]);.wait(NULL);.wait(NULL);.
6f40 00 00 58 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 66 6f 72 6b 28 29 20 3d 3d 20 30 29 20 7b ..X....}.else.if.(fork().==.0).{
6f60 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 44 46 4c 29 3b 20 72 75 6e 5f 63 6d .signal(SIGINT,.SIG_DFL);.run_cm
6f80 64 28 6c 69 6e 65 29 3b 20 7d 20 65 6c 73 65 20 77 61 69 74 28 4e 55 4c 4c 29 3b 00 00 00 01 7d d(line);.}.else.wait(NULL);....}
6fa0 00 00 00 00 00 00 00 1c 76 6f 69 64 20 72 75 6e 5f 69 6e 74 65 72 61 63 74 69 76 65 28 76 6f 69 ........void.run_interactive(voi
6fc0 64 29 20 7b 00 00 00 38 20 20 20 20 45 64 69 74 4c 69 6e 65 20 2a 65 6c 20 3d 20 65 6c 5f 69 6e d).{...8....EditLine.*el.=.el_in
6fe0 69 74 28 22 73 68 22 2c 20 73 74 64 69 6e 2c 20 73 74 64 6f 75 74 2c 20 73 74 64 65 72 72 29 3b it("sh",.stdin,.stdout,.stderr);
7000 00 00 00 23 20 20 20 20 48 69 73 74 6f 72 79 20 2a 68 69 73 74 20 3d 20 68 69 73 74 6f 72 79 5f ...#....History.*hist.=.history_
7020 69 6e 69 74 28 29 3b 00 00 00 11 20 20 20 20 48 69 73 74 45 76 65 6e 74 20 65 76 3b 00 00 00 27 init();........HistEvent.ev;...'
7040 20 20 20 20 68 69 73 74 6f 72 79 28 68 69 73 74 2c 20 26 65 76 2c 20 48 5f 53 45 54 53 49 5a 45 ....history(hist,.&ev,.H_SETSIZE
7060 2c 20 31 30 30 29 3b 00 00 00 27 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 48 49 53 ,.100);...'....el_set(el,.EL_HIS
7080 54 2c 20 68 69 73 74 6f 72 79 2c 20 68 69 73 74 29 3b 00 00 00 26 20 20 20 20 65 6c 5f 73 65 74 T,.history,.hist);...&....el_set
70a0 28 65 6c 2c 20 45 4c 5f 50 52 4f 4d 50 54 2c 20 67 65 74 5f 70 72 6f 6d 70 74 29 3b 00 00 00 20 (el,.EL_PROMPT,.get_prompt);....
70c0 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 45 44 49 54 4f 52 2c 20 22 76 69 22 29 3b ....el_set(el,.EL_EDITOR,."vi");
70e0 00 00 00 1d 20 20 20 20 65 6c 5f 73 65 74 28 65 6c 2c 20 45 4c 5f 53 49 47 4e 41 4c 2c 20 31 29 ........el_set(el,.EL_SIGNAL,.1)
7100 3b 00 00 00 1c 20 20 20 20 73 69 67 6e 61 6c 28 53 49 47 49 4e 54 2c 20 53 49 47 5f 49 47 4e 29 ;........signal(SIGINT,.SIG_IGN)
7120 3b 00 00 00 15 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6c 69 6e 65 3b 00 00 00 0e 20 20 ;........const.char.*line;......
7140 20 20 69 6e 74 20 63 6f 75 6e 74 3b 00 00 00 32 20 20 20 20 77 68 69 6c 65 20 28 28 6c 69 6e 65 ..int.count;...2....while.((line
7160 20 3d 20 65 6c 5f 67 65 74 73 28 65 6c 2c 20 26 63 6f 75 6e 74 29 29 20 21 3d 20 4e 55 4c 4c 29 .=.el_gets(el,.&count)).!=.NULL)
7180 20 7b 00 00 00 18 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 31 29 20 7b 00 00 .{............if.(count.>.1).{..
71a0 00 25 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 63 6d 64 20 3d 20 73 74 72 64 75 70 .%............char.*cmd.=.strdup
71c0 28 6c 69 6e 65 29 3b 00 00 00 2e 20 20 20 20 20 20 20 20 20 20 20 20 68 69 73 74 6f 72 79 28 68 (line);................history(h
71e0 69 73 74 2c 20 26 65 76 2c 20 48 5f 45 4e 54 45 52 2c 20 6c 69 6e 65 29 3b 00 00 00 19 20 20 20 ist,.&ev,.H_ENTER,.line);.......
7200 20 20 20 20 20 20 20 20 20 65 78 65 63 75 74 65 28 63 6d 64 29 3b 00 00 00 16 20 20 20 20 20 20 .........execute(cmd);..........
7220 20 20 20 20 20 20 66 72 65 65 28 63 6d 64 29 3b 00 00 00 09 20 20 20 20 20 20 20 20 7d 00 00 00 ......free(cmd);............}...
7240 05 20 20 20 20 7d 00 00 00 22 20 20 20 20 65 6c 5f 65 6e 64 28 65 6c 29 3b 20 68 69 73 74 6f 72 .....}..."....el_end(el);.histor
7260 79 5f 65 6e 64 28 68 69 73 74 29 3b 00 00 00 01 7d 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 y_end(hist);....}5..............
7280 00 48 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 09 00 00 00 00 00 .H..............................
72a0 00 01 00 00 00 00 00 00 00 35 81 5f d0 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........5._....................
72c0 13 00 00 00 01 00 00 00 00 00 00 00 00 ff ff ff ff 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
72e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
73a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
73c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
73e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6a 5d 34 8d 04 01 00 00 00 0c 00 f5 18 00 00 00 00 ...............j]4..............
7440 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 f5 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 ................................
7460 00 00 35 81 f5 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 00 00 00 01 00 ..5.......................W.....
7480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 bf 09 00 00 00 00 00 00 35 81 e7 aa ..........................5...