2012-11-30 53 views
2

是否可以實現bash腳本的子命令。我想到的是這樣的:帶bash的子命令

http://docs.python.org/dev/library/argparse.html#sub-commands

+0

不知道你在得到什麼。你可以添加一個程序調用「svn」,然後解析所有的svn命令。以一種所有bash的方式調用子命令。 – kdubs

+0

argparse對支持命令行界面的程序進行標記分析,例如'git clean -df'將被解析爲'clean'子命令,'-df'是'clean'特定的標誌。 – LavaScornedOven

+0

這是可能的,但你必須實現你自己的參數解析器來處理子命令。 – koola

回答

7

這裏有一個簡單的不安全技術:

#!/bin/bash 

clean() { 
    echo rm -fR . 
    echo Thanks to koola, I let you off this time, 
    echo but you really shouldn\'t run random code you download from the net. 
} 

help() { 
    echo Whatever you do, don\'t use clean 
} 

args() { 
    printf "%s" options: 
    while getopts a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z: OPTION "[email protected]"; do 
    printf " -%s '%s'" $OPTION $OPTARG 
    done 
    shift $((OPTIND - 1)) 
    printf "arg: '%s'" "[email protected]" 
    echo 
} 

"[email protected]" 

這一切都非常酷,但它不限制子命令可能是什麼。所以你可能想要用最後一行代替:

if [[ $1 =~ ^(clean|help|args)$ ]]; then 
    "[email protected]" 
else 
    echo "Invalid subcommand $1" >&2 
    exit 1 
fi 

有些系統讓你在子命令前加上「全局」選項。如果需要,可以在子命令執行之前放置一個getopts循環。在落入子命令執行之前,請記住shift;同樣,將OPTIND重置爲1,以便子命令getopts不會感到困惑。

+1

您確實應該回應該rm命令以確保安全,或添加免責聲明。 – koola

+1

@koola,是的,你說得對。儘管我認爲幫助文本是一個免責聲明,連同「不安全」一詞。 – rici