blob: 21252d5b61a7da2448da2d3be7333cc035de29f6 (
plain)
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
|
#!/usr/bin/env bash
source $(dirname ${BASH_SOURCE[0]})/nix-utils.sh
usage() {
cat <<EOS >&2
$(help_synopsis "${BASH_SOURCE[0]}" "[-h] [--shell]")
--shell If a command is not available, try to execute it in this shell
-h Show this help and exit
All nixos-script subcommands and their respective arguments are available.
In addition to the normal commands, these commands are available:
list | Lists all available commands
$(help_end "repl")
EOS
}
Color_Off='\e[0m'
Red='\e[0;31m'
Green='\e[32m'
__SHELL=0
for arg
do
case $arg in
--shell)
__SHELL=1
dbg "__SHELL = $__SHELL"
;;
"-h")
usage
exit 0
;;
*)
;;
esac
done
run() {
dbg $*; $*
}
__exists() {
dbg "Exists '$1'? ..."
which $1 >/dev/null 2>/dev/null
}
prompt() {
echo -en "${Green}nix-script repl >${Color_Off} "
}
__run_if_exists() {
[[ $(__exists $1) ]] && run $* || false
}
__list() {
dbg "Listing commands"
caller_util_list_subcommands_for "nix-script"
}
prompt
while read COMMAND ARGS
do
[[ $COMMAND =~ "quit" || $COMMAND =~ "exit" ]] && break
[[ $COMMAND =~ "help" ]] && usage && prompt && continue
[[ $COMMAND =~ "list" ]] && __list && prompt && continue
dbg "Got '$COMMAND' with args '$ARGS'"
stdout "Searching for script for '$COMMAND'"
SCRIPT=$(script_for $COMMAND)
if [[ ! -f $SCRIPT || ! -x $SCRIPT ]]
then
dbg "Not available or executable: $COMMAND"
#
# Checks whether the args include bash-specific things like || or &&, as
# these cannot be executed by nix-script repl by now, and prints a
# warning and does not allow execution of these.
#
if [[ "$ARGS" =~ ^[a-zA-Z0-9_\ ]*$ && $__SHELL -eq 1 ]]
then
dbg "Executing: '$COMMAND $ARGS'"
$COMMAND $ARGS
fi
else
stdout "Calling: '$COMMAND $ARGS'"
bash $SCRIPT $ARGS
fi
prompt
done
stdout "Ready. Bye-Bye!"
|