-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcmdr
executable file
Β·122 lines (105 loc) Β· 2.95 KB
/
cmdr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/bin/bash
source $PLUG_PATH/cfgs
help_msg() {
log "
cmdr: the command runner
desc: manage, search and execute your commands
help: cmdr [args]
args:
-e, --edit edit commands file
-g, --grep <regex> grep for a particular command
-x, --execute <regex> execute a set of commands
-a, --add <regex> add a set of commands to a file
-l, --last show last set of commands
-h, --help display this help\
"
}
cmdr_cfg() {
cmdr_var_start='<:'
cmdr_var_end=':>'
cmdr_disp_start='<'
cmdr_disp_end='>'
}
cmdr_all_cmds() {
if [ -d $CMDR_CMDS_PATH ]; then
find $CMDR_CMDS_PATH -type f -not -path "*/.*" -exec awk '/```.*#/{flag=1;next}/```/{flag=0}flag' {} \;
else
awk '/```.*#/{flag=1;next}/```/{flag=0}flag' $CMDR_CMDS_PATH
fi
}
cmdr_format() {
cmds_disp=${1//$cmdr_var_start/$cmdr_disp_start}
cmds_disp=${cmds_disp//$cmdr_var_end/$cmdr_disp_end}
}
cmdr_display() {
echo "$1" | awk -F "\n" '{print NR ". " $1}'
}
cmdr_grep() {
[ ! -n "$1" ] && err "no regex provided"
cmds=`cmdr_all_cmds | grep $1`
[ "$cmds" == "" ] && err "no commands found"
cmdr_format "$cmds"
cmdr_display "$cmds_disp"
}
cmdr_exec() {
cmdr_grep "$1"
selected_cmds=$(cmdr_select_cmds "$cmds")
echo "#! $CMDR_EXEC_SHELL" > $CMDR_EXEC_FILE
echo "$selected_cmds" >> $CMDR_EXEC_FILE
chmod +x $CMDR_EXEC_FILE
$CMDR_EXEC_FILE
mv $CMDR_EXEC_FILE $CMDR_LAST_FILE
}
cmdr_add() {
cmdr_grep "$1"
selected_cmds=$(cmdr_select_cmds "$cmds")
[ ! -n "$CMDR_TEMP_CMDS" ] && err "CMDR_TEMP_CMDS not set" && exit 1
echo "$selected_cmds" > $CMDR_TEMP_CMDS
cp $CMDR_TEMP_CMDS $CMDR_LAST_FILE
}
cmdr_final_cmd() {
entry=$1
cmd=$1
while [[ $entry =~ $cmdr_var_start ]]; do
entry=${entry#*$cmdr_var_start}
key=${entry%%$cmdr_var_end*}
read -p "$key: " val
[ ! -n "$val" ] && echo "err: no value provided" && exit 1
cmd=${cmd/$cmdr_var_start$key$cmdr_var_end/$val}
done
echo "$cmd"
}
cmdr_select_cmds() {
selected_cmds=""
read -p "Enter command numbers (separate by space): " cmd_nums
for cmd_num in $cmd_nums; do
cmd=$(echo "$1" | sed -n "${cmd_num}p")
cmdr_format "$cmd"
final_cmd=$(cmdr_final_cmd "$cmd")
echo "echo \"$cmd_num ...\""
echo "$final_cmd"
done
echo "echo \"done.\""
}
cmdr_last() {
while IFS= read -r line; do
if [[ ! $line =~ ^echo ]]; then
echo "$line"
fi
done < "$CMDR_LAST_FILE"
}
prereqs() {
cmdr_cfg
check_dir $CMDR_CMDS_PATH
}
options() {
case $1 in
-e | --edit ) edit $CMDR_CMDS_PATH;;
-g | --grep ) cmdr_grep "$2";;
-a | --add ) cmdr_add "$2";;
-x | --execute ) cmdr_exec "$2";;
-l | --last ) cmdr_last;;
* ) help_msg;;
esac
}
init $@