You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.2 KiB
61 lines
1.2 KiB
#!/bin/zsh -i |
|
# .files|Argshell |
|
# (c) 2015 Taeyeon Mori |
|
|
|
# Synopsis |
|
function synopsis() { |
|
print "Synopsis: $1 [-h] [-e] [-l|-ll] <command...>" |
|
print "" |
|
print "Run a command repeatedly, with different arguments." |
|
print "" |
|
print "Arguments:" |
|
print " -h Show this help message" |
|
print " -l Treat additional arguments as literal" |
|
print " -ll Treat the whole command as literal" |
|
print "" |
|
print "[.files|argshell] Ver 1.0 (c) 2015 Taeyeon Mori" |
|
} |
|
|
|
# Parse options |
|
EVAL_LINE=true |
|
EVAL_CMD=true |
|
|
|
while true; do |
|
if [ "$1" = "-l" ]; then |
|
EVAL_LINE=false |
|
elif [ "$1" = "-ll" ]; then |
|
EVAL_LINE=false |
|
EVAL_CMD=false |
|
elif [ "$1" = "-h" ]; then |
|
synopsis "$0" |
|
exit 0 |
|
else |
|
break |
|
fi |
|
shift |
|
done |
|
|
|
if [ $# -lt 1 ]; then |
|
synopsis "$0" |
|
exit 1 |
|
fi |
|
|
|
# The prompt |
|
PROMPT="$* => " |
|
|
|
prompt() { |
|
echo -n "$2" |
|
read $1 |
|
} |
|
|
|
# Do the work |
|
while prompt args "$PROMPT"; do |
|
if $EVAL_LINE; then |
|
eval "$@" $args |
|
elif $EVAL_CMD; then |
|
eval "$@" `python -c "import shlex;print(' '.join(\"'%s'\" % s.replace(\"'\",\"'\''\") for s in shlex.split(r'''$args''')))"` |
|
else |
|
"$@" $args |
|
fi |
|
done |
|
|
|
|