2017-05-02 14 views
0

私は、コマンドのコマンドを作成しました:私はzipAndUploadコマンドを作成し、既存のコマンドを再利用したいCobra Commander:別のコマンドからコマンドを呼び出す方法は?コブラで

myapp zip -directory "xzy" -output="zipname" 
myapp upload -filename="abc" 

、ここではすなわち、

myapp zipup -directory "xzy" -outout="zipname" 

ZIPUPは、最初の "呼ぶだろうzip "コマンドを実行し、" zip "コマンドの出力名を" upload "コマンドの" filename "フラグとして使用します。

これを実行するには、コードを重複させる必要はありませんか?

答えて

1

"共有"スイッチはグローバルになります。

サブコマンドの「実行」セクションは、関数に変換されます。手動でコマンドを定義する必要があります。これを行うには

var (
    cfgDirectory string 
    cfgFilename string 
    cfgOutput string 
) 

var rootCmd = &cobra.Command{ 
    Use: "root", 
    Short: "root", 
    Long: "root", 
    Run: func(cmd *cobra.Command, args []string) { 
     // something 
    }, 
} 

var uploadCmd = &cobra.Command{ 
    Use: 'upload', 
    Short: 'upload', 
    Long: `upload`, 
    Run: func(cmd *cobra.Command, args []string) { 
     Upload() 
    }, 
} 

var zipCmd = &cobra.Command{ 
    Use: "zip", 
    Short: "zip", 
    Long: "zip", 
    Run: func(cmd *cobra.Command, args []string) { 
     Zip() 
    }, 
} 

var zipupCmd = &cobra.Command{ 
    Use: "zipup", 
    Short: "zipup", 
    Long: "zipup", 
    Run: func(cmd *cobra.Command, args []string) { 
     Zip() 
     Upload() 
    }, 
} 

func setFlags() { 
    rootCmd.PersistentFlags().StringVar(&cfgDirectory, "directory", "", "explanation") 
    rootCmd.PersistentFlags().StringVar(&cfgFilename, "filename", "", "explanation") 
    rootCmd.PersistentFlags().StringVar(&cfgOutput, "output", "", "explanation") 
} 

func Upload() { 
    // you know what to do 
} 

func Zip() { 
    // you know what to do 
} 
... 

// Add subcommands 
rootCmd.AddCommand(zipCmd) 
rootCmd.AddCommand(uploadCmd) 
rootCmd.AddCommand(zipupCmd) 

が、これはこれは私がすべてのサンプルコードなしで行うことができる最高で、お役に立てば幸いです。

関連する問題