[lxc-devel] [lxd/master] usage to stdout #2301 change lxc help from Stderr to Stdout

cneira on Github lxc-bot at linuxcontainers.org
Thu Aug 25 21:19:05 UTC 2016


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 435 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20160825/2467b213/attachment.bin>
-------------- next part --------------
From ef3d24f434aea1239af6ed4ce7695bcbeee74853 Mon Sep 17 00:00:00 2001
From: Carlos <cneirabustos at gmail.com>
Date: Thu, 25 Aug 2016 15:31:06 -0300
Subject: [PATCH 1/4] change lxc --help output to stdout

Signed-off-by: Carlos <cneirabustos at gmail.com>
---
 lxc/#main.go# | 303 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lxc/.#main.go |   1 +
 lxc/help.go   |   2 +-
 3 files changed, 305 insertions(+), 1 deletion(-)
 create mode 100644 lxc/#main.go#
 create mode 120000 lxc/.#main.go

diff --git a/lxc/#main.go# b/lxc/#main.go#
new file mode 100644
index 0000000..6b9a26c
--- /dev/null
+++ b/lxc/#main.go#
@@ -0,0 +1,303 @@
+package main
+
+import (
+	"fmt"
+	"os"
+	"os/exec"
+	"path"
+	"strings"
+	"syscall"
+
+	"github.com/lxc/lxd"
+	"github.com/lxc/lxd/shared"
+	"github.com/lxc/lxd/shared/gnuflag"
+	"github.com/lxc/lxd/shared/i18n"
+	"github.com/lxc/lxd/shared/logging"
+)
+
+var configPath string
+
+func main() {
+	if err := run(); err != nil {
+		msg := fmt.Sprintf(i18n.G("error: %v"), err)
+
+		lxdErr := lxd.GetLocalLXDErr(err)
+		switch lxdErr {
+		case syscall.ENOENT:
+			msg = i18n.G("LXD socket not found; is LXD installed and running?")
+		case syscall.ECONNREFUSED:
+			msg = i18n.G("Connection refused; is LXD running?")
+		case syscall.EACCES:
+			msg = i18n.G("Permission denied, are you in the lxd group?")
+		}
+
+		fmt.Fprintln(os.Stderr, fmt.Sprintf("%s", msg))
+		os.Exit(1)
+	}
+}
+
+func run() error {
+	verbose := gnuflag.Bool("verbose", false, i18n.G("Enables verbose mode."))
+	debug := gnuflag.Bool("debug", false, i18n.G("Enables debug mode."))
+	forceLocal := gnuflag.Bool("force-local", false, i18n.G("Force using the local unix socket."))
+	noAlias := gnuflag.Bool("no-alias", false, i18n.G("Ignore aliases when determining what command to run."))
+
+	configDir := "$HOME/.config/lxc"
+	if os.Getenv("LXD_CONF") != "" {
+		configDir = os.Getenv("LXD_CONF")
+	}
+	configPath = os.ExpandEnv(path.Join(configDir, "config.yml"))
+
+	if len(os.Args) >= 3 && os.Args[1] == "config" && os.Args[2] == "profile" {
+		fmt.Fprintf(os.Stderr, i18n.G("`lxc config profile` is deprecated, please use `lxc profile`")+"\n")
+		os.Args = append(os.Args[:1], os.Args[2:]...)
+	}
+
+	if len(os.Args) >= 2 && (os.Args[1] == "-h" || os.Args[1] == "--help") {
+		os.Args[1] = "help"
+	}
+
+	if len(os.Args) >= 2 && (os.Args[1] == "--all") {
+		os.Args[1] = "help"
+		os.Args = append(os.Args, "--all")
+	}
+
+	if len(os.Args) == 2 && os.Args[1] == "--version" {
+		os.Args[1] = "version"
+	}
+
+	if len(os.Args) < 2 {
+		commands["help"].run(nil, nil)
+		os.Exit(1)
+	}
+
+	var config *lxd.Config
+	var err error
+
+	if *forceLocal {
+		config = &lxd.DefaultConfig
+	} else {
+		config, err = lxd.LoadConfig(configPath)
+		if err != nil {
+			return err
+		}
+	}
+
+	// This is quite impolite, but it seems gnuflag needs us to shift our
+	// own exename out of the arguments before parsing them. However, this
+	// is useful for execIfAlias, which wants to know exactly the command
+	// line we received, and in some cases is called before this shift, and
+	// in others after. So, let's save the original args.
+	origArgs := os.Args
+	name := os.Args[1]
+
+	/* at this point we haven't parsed the args, so we have to look for
+	 * --no-alias by hand.
+	 */
+	if !shared.StringInSlice("--no-alias", origArgs) {
+		execIfAliases(config, origArgs)
+	}
+	cmd, ok := commands[name]
+	if !ok {
+		commands["help"].run(nil, nil)
+		fmt.Fprintf(os.Stderr, "\n"+i18n.G("error: unknown command: %s")+"\n", name)
+		os.Exit(1)
+	}
+	cmd.flags()
+	gnuflag.Usage = func() {
+		fmt.Fprintf(os.Stderr, i18n.G("Usage: %s")+"\n\n"+i18n.G("Options:")+"\n\n", strings.TrimSpace(cmd.usage()))
+		gnuflag.PrintDefaults()
+	}
+
+	os.Args = os.Args[1:]
+	gnuflag.Parse(true)
+
+	shared.Log, err = logging.GetLogger("", "", *verbose, *debug, nil)
+	if err != nil {
+		return err
+	}
+
+	// If the user is running a command that may attempt to connect to the local daemon
+	// and this is the first time the client has been run by the user, then check to see
+	// if LXD has been properly configured.  Don't display the message if the var path
+	// does not exist (LXD not installed), as the user may be targeting a remote daemon.
+	if os.Args[0] != "help" && os.Args[0] != "version" && shared.PathExists(shared.VarPath("")) && !shared.PathExists(config.ConfigDir) {
+
+		// Create the config dir so that we don't get in here again for this user.
+		err = os.MkdirAll(config.ConfigDir, 0750)
+		if err != nil {
+			return err
+		}
+
+		fmt.Fprintf(os.Stderr, i18n.G("If this is your first time using LXD, you should also run: sudo lxd init")+"\n")
+		fmt.Fprintf(os.Stderr, i18n.G("To start your first container, try: lxc launch ubuntu:16.04")+"\n\n")
+	}
+
+	err = cmd.run(config, gnuflag.Args())
+	if err == errArgs {
+		/* If we got an error about invalid arguments, let's try to
+		 * expand this as an alias
+		 */
+		if !*noAlias {
+			execIfAliases(config, origArgs)
+		}
+		fmt.Fprintf(os.Stderr, "%s\n\n"+i18n.G("error: %v")+"\n", cmd.usage(), err)
+		os.Exit(1)
+	}
+	return err
+}
+
+type command interface {
+	usage() string
+	flags()
+	showByDefault() bool
+	run(config *lxd.Config, args []string) error
+}
+
+var commands = map[string]command{
+	"config":  &configCmd{},
+	"copy":    &copyCmd{},
+	"delete":  &deleteCmd{},
+	"exec":    &execCmd{},
+	"file":    &fileCmd{},
+	"finger":  &fingerCmd{},
+	"help":    &helpCmd{},
+	"image":   &imageCmd{},
+	"info":    &infoCmd{},
+	"init":    &initCmd{},
+	"launch":  &launchCmd{},
+	"list":    &listCmd{},
+	"monitor": &monitorCmd{},
+	"move":    &moveCmd{},
+	"pause": &actionCmd{
+		action:         shared.Freeze,
+		name:           "pause",
+		additionalHelp: i18n.G("The opposite of `lxc pause` is `lxc start`."),
+	},
+	"profile": &profileCmd{},
+	"publish": &publishCmd{},
+	"remote":  &remoteCmd{},
+	"restart": &actionCmd{
+		action:     shared.Restart,
+		hasTimeout: true,
+		visible:    true,
+		name:       "restart",
+		timeout:    -1,
+	},
+	"restore":  &restoreCmd{},
+	"snapshot": &snapshotCmd{},
+	"start": &actionCmd{
+		action:  shared.Start,
+		visible: true,
+		name:    "start",
+	},
+	"stop": &actionCmd{
+		action:     shared.Stop,
+		hasTimeout: true,
+		visible:    true,
+		name:       "stop",
+		timeout:    -1,
+	},
+	"version": &versionCmd{},
+}
+
+// defaultAliases contains LXC's built-in command line aliases.  The built-in
+// aliases are checked only if no user-defined alias was found.
+var defaultAliases = map[string]string{
+	"shell": "exec @ARGS@ -- login -f root",
+
+	"cp": "copy",
+	"ls": "list",
+	"mv": "move",
+	"rm": "delete",
+
+	"image cp": "image copy",
+	"image ls": "image list",
+	"image rm": "image delete",
+
+	"image alias ls": "image alias list",
+	"image alias rm": "image alias delete",
+
+	"remote ls": "remote list",
+	"remote mv": "remote rename",
+	"remote rm": "remote remove",
+
+	"config device ls": "config device list",
+	"config device rm": "config device remove",
+}
+
+var errArgs = fmt.Errorf(i18n.G("wrong number of subcommand arguments"))
+
+func findAlias(aliases map[string]string, origArgs []string) ([]string, []string, bool) {
+	foundAlias := false
+	aliasKey := []string{}
+	aliasValue := []string{}
+
+	for k, v := range aliases {
+		foundAlias = true
+		for i, key := range strings.Split(k, " ") {
+			if len(origArgs) <= i+1 || origArgs[i+1] != key {
+				foundAlias = false
+				break
+			}
+		}
+
+		if foundAlias {
+			aliasKey = strings.Split(k, " ")
+			aliasValue = strings.Split(v, " ")
+			break
+		}
+	}
+
+	return aliasKey, aliasValue, foundAlias
+}
+
+func expandAlias(config *lxd.Config, origArgs []string) ([]string, bool) {
+	aliasKey, aliasValue, foundAlias := findAlias(config.Aliases, origArgs)
+	if !foundAlias {
+		aliasKey, aliasValue, foundAlias = findAlias(defaultAliases, origArgs)
+		if !foundAlias {
+			return []string{}, false
+		}
+	}
+
+	newArgs := []string{origArgs[0]}
+	hasReplacedArgsVar := false
+
+	for i, aliasArg := range aliasValue {
+		if aliasArg == "@ARGS@" && len(origArgs) > i {
+			newArgs = append(newArgs, origArgs[i+1:]...)
+			hasReplacedArgsVar = true
+		} else {
+			newArgs = append(newArgs, aliasArg)
+		}
+	}
+
+	if !hasReplacedArgsVar {
+		/* add the rest of the arguments */
+		newArgs = append(newArgs, origArgs[len(aliasKey)+1:]...)
+	}
+
+	/* don't re-do aliases the next time; this allows us to have recursive
+	 * aliases, e.g. `lxc list` to `lxc list -c n`
+	 */
+	newArgs = append(newArgs[:2], append([]string{"--no-alias"}, newArgs[2:]...)...)
+
+	return newArgs, true
+}
+
+func execIfAliases(config *lxd.Config, origArgs []string) {
+	newArgs, expanded := expandAlias(config, origArgs)
+	if !expanded {
+		return
+	}
+
+	path, err := exec.LookPath(origArgs[0])
+	if err != nil {
+		fmt.Fprintf(os.Stderr, i18n.G("processing aliases failed %s\n"), err)
+		os.Exit(5)
+	}
+	ret := syscall.Exec(path, newArgs, syscall.Environ())
+	fmt.Fprintf(os.Stderr, i18n.G("processing aliases failed %s\n"), ret)
+	os.Exit(5)
+}
diff --git a/lxc/.#main.go b/lxc/.#main.go
new file mode 120000
index 0000000..4abc121
--- /dev/null
+++ b/lxc/.#main.go
@@ -0,0 +1 @@
+cnb at f24vm1.2369:1472136537
\ No newline at end of file
diff --git a/lxc/help.go b/lxc/help.go
index 678e218..235c71d 100644
--- a/lxc/help.go
+++ b/lxc/help.go
@@ -39,7 +39,7 @@ func (c *helpCmd) run(_ *lxd.Config, args []string) error {
 			if !ok {
 				fmt.Fprintf(os.Stderr, i18n.G("error: unknown command: %s")+"\n", name)
 			} else {
-				fmt.Fprintf(os.Stderr, cmd.usage()+"\n")
+				fmt.Fprintf(os.StdOut, cmd.usage()+"\n")
 			}
 		}
 		return nil

From ffc5075187c2a133063b81fb0f5c4cd2e1748ad7 Mon Sep 17 00:00:00 2001
From: Carlos <cneirabustos at gmail.com>
Date: Thu, 25 Aug 2016 16:04:35 -0300
Subject: [PATCH 2/4] change lxc config --help to stdout

---
 lxc/help.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxc/help.go b/lxc/help.go
index 678e218..235c71d 100644
--- a/lxc/help.go
+++ b/lxc/help.go
@@ -39,7 +39,7 @@ func (c *helpCmd) run(_ *lxd.Config, args []string) error {
 			if !ok {
 				fmt.Fprintf(os.Stderr, i18n.G("error: unknown command: %s")+"\n", name)
 			} else {
-				fmt.Fprintf(os.Stderr, cmd.usage()+"\n")
+				fmt.Fprintf(os.StdOut, cmd.usage()+"\n")
 			}
 		}
 		return nil

From cde4bfc444c8e56c349e7bfdadfc96ec7ed91146 Mon Sep 17 00:00:00 2001
From: Carlos <cneirabustos at gmail.com>
Date: Thu, 25 Aug 2016 17:27:35 -0300
Subject: [PATCH 3/4] :q

Signed-off-by: Carlos <cneirabustos at gmail.com>
---
 lxc/help.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxc/help.go b/lxc/help.go
index 235c71d..dd1b199 100644
--- a/lxc/help.go
+++ b/lxc/help.go
@@ -39,7 +39,7 @@ func (c *helpCmd) run(_ *lxd.Config, args []string) error {
 			if !ok {
 				fmt.Fprintf(os.Stderr, i18n.G("error: unknown command: %s")+"\n", name)
 			} else {
-				fmt.Fprintf(os.StdOut, cmd.usage()+"\n")
+				fmt.Fprintf( os.Stdout, cmd.usage()+"\n")
 			}
 		}
 		return nil

From a7030a0b9d7f40f1d8ad75f6372b4103be9a3bca Mon Sep 17 00:00:00 2001
From: Carlos <cneirabustos at gmail.com>
Date: Thu, 25 Aug 2016 18:14:38 -0300
Subject: [PATCH 4/4] lxc help change stderr to stdout

Signed-off-by: Carlos <cneirabustos at gmail.com>
---
 lxc/#main.go# | 303 ----------------------------------------------------------
 lxc/.#main.go |   1 -
 2 files changed, 304 deletions(-)
 delete mode 100644 lxc/#main.go#
 delete mode 120000 lxc/.#main.go

diff --git a/lxc/#main.go# b/lxc/#main.go#
deleted file mode 100644
index 6b9a26c..0000000
--- a/lxc/#main.go#
+++ /dev/null
@@ -1,303 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"os"
-	"os/exec"
-	"path"
-	"strings"
-	"syscall"
-
-	"github.com/lxc/lxd"
-	"github.com/lxc/lxd/shared"
-	"github.com/lxc/lxd/shared/gnuflag"
-	"github.com/lxc/lxd/shared/i18n"
-	"github.com/lxc/lxd/shared/logging"
-)
-
-var configPath string
-
-func main() {
-	if err := run(); err != nil {
-		msg := fmt.Sprintf(i18n.G("error: %v"), err)
-
-		lxdErr := lxd.GetLocalLXDErr(err)
-		switch lxdErr {
-		case syscall.ENOENT:
-			msg = i18n.G("LXD socket not found; is LXD installed and running?")
-		case syscall.ECONNREFUSED:
-			msg = i18n.G("Connection refused; is LXD running?")
-		case syscall.EACCES:
-			msg = i18n.G("Permission denied, are you in the lxd group?")
-		}
-
-		fmt.Fprintln(os.Stderr, fmt.Sprintf("%s", msg))
-		os.Exit(1)
-	}
-}
-
-func run() error {
-	verbose := gnuflag.Bool("verbose", false, i18n.G("Enables verbose mode."))
-	debug := gnuflag.Bool("debug", false, i18n.G("Enables debug mode."))
-	forceLocal := gnuflag.Bool("force-local", false, i18n.G("Force using the local unix socket."))
-	noAlias := gnuflag.Bool("no-alias", false, i18n.G("Ignore aliases when determining what command to run."))
-
-	configDir := "$HOME/.config/lxc"
-	if os.Getenv("LXD_CONF") != "" {
-		configDir = os.Getenv("LXD_CONF")
-	}
-	configPath = os.ExpandEnv(path.Join(configDir, "config.yml"))
-
-	if len(os.Args) >= 3 && os.Args[1] == "config" && os.Args[2] == "profile" {
-		fmt.Fprintf(os.Stderr, i18n.G("`lxc config profile` is deprecated, please use `lxc profile`")+"\n")
-		os.Args = append(os.Args[:1], os.Args[2:]...)
-	}
-
-	if len(os.Args) >= 2 && (os.Args[1] == "-h" || os.Args[1] == "--help") {
-		os.Args[1] = "help"
-	}
-
-	if len(os.Args) >= 2 && (os.Args[1] == "--all") {
-		os.Args[1] = "help"
-		os.Args = append(os.Args, "--all")
-	}
-
-	if len(os.Args) == 2 && os.Args[1] == "--version" {
-		os.Args[1] = "version"
-	}
-
-	if len(os.Args) < 2 {
-		commands["help"].run(nil, nil)
-		os.Exit(1)
-	}
-
-	var config *lxd.Config
-	var err error
-
-	if *forceLocal {
-		config = &lxd.DefaultConfig
-	} else {
-		config, err = lxd.LoadConfig(configPath)
-		if err != nil {
-			return err
-		}
-	}
-
-	// This is quite impolite, but it seems gnuflag needs us to shift our
-	// own exename out of the arguments before parsing them. However, this
-	// is useful for execIfAlias, which wants to know exactly the command
-	// line we received, and in some cases is called before this shift, and
-	// in others after. So, let's save the original args.
-	origArgs := os.Args
-	name := os.Args[1]
-
-	/* at this point we haven't parsed the args, so we have to look for
-	 * --no-alias by hand.
-	 */
-	if !shared.StringInSlice("--no-alias", origArgs) {
-		execIfAliases(config, origArgs)
-	}
-	cmd, ok := commands[name]
-	if !ok {
-		commands["help"].run(nil, nil)
-		fmt.Fprintf(os.Stderr, "\n"+i18n.G("error: unknown command: %s")+"\n", name)
-		os.Exit(1)
-	}
-	cmd.flags()
-	gnuflag.Usage = func() {
-		fmt.Fprintf(os.Stderr, i18n.G("Usage: %s")+"\n\n"+i18n.G("Options:")+"\n\n", strings.TrimSpace(cmd.usage()))
-		gnuflag.PrintDefaults()
-	}
-
-	os.Args = os.Args[1:]
-	gnuflag.Parse(true)
-
-	shared.Log, err = logging.GetLogger("", "", *verbose, *debug, nil)
-	if err != nil {
-		return err
-	}
-
-	// If the user is running a command that may attempt to connect to the local daemon
-	// and this is the first time the client has been run by the user, then check to see
-	// if LXD has been properly configured.  Don't display the message if the var path
-	// does not exist (LXD not installed), as the user may be targeting a remote daemon.
-	if os.Args[0] != "help" && os.Args[0] != "version" && shared.PathExists(shared.VarPath("")) && !shared.PathExists(config.ConfigDir) {
-
-		// Create the config dir so that we don't get in here again for this user.
-		err = os.MkdirAll(config.ConfigDir, 0750)
-		if err != nil {
-			return err
-		}
-
-		fmt.Fprintf(os.Stderr, i18n.G("If this is your first time using LXD, you should also run: sudo lxd init")+"\n")
-		fmt.Fprintf(os.Stderr, i18n.G("To start your first container, try: lxc launch ubuntu:16.04")+"\n\n")
-	}
-
-	err = cmd.run(config, gnuflag.Args())
-	if err == errArgs {
-		/* If we got an error about invalid arguments, let's try to
-		 * expand this as an alias
-		 */
-		if !*noAlias {
-			execIfAliases(config, origArgs)
-		}
-		fmt.Fprintf(os.Stderr, "%s\n\n"+i18n.G("error: %v")+"\n", cmd.usage(), err)
-		os.Exit(1)
-	}
-	return err
-}
-
-type command interface {
-	usage() string
-	flags()
-	showByDefault() bool
-	run(config *lxd.Config, args []string) error
-}
-
-var commands = map[string]command{
-	"config":  &configCmd{},
-	"copy":    &copyCmd{},
-	"delete":  &deleteCmd{},
-	"exec":    &execCmd{},
-	"file":    &fileCmd{},
-	"finger":  &fingerCmd{},
-	"help":    &helpCmd{},
-	"image":   &imageCmd{},
-	"info":    &infoCmd{},
-	"init":    &initCmd{},
-	"launch":  &launchCmd{},
-	"list":    &listCmd{},
-	"monitor": &monitorCmd{},
-	"move":    &moveCmd{},
-	"pause": &actionCmd{
-		action:         shared.Freeze,
-		name:           "pause",
-		additionalHelp: i18n.G("The opposite of `lxc pause` is `lxc start`."),
-	},
-	"profile": &profileCmd{},
-	"publish": &publishCmd{},
-	"remote":  &remoteCmd{},
-	"restart": &actionCmd{
-		action:     shared.Restart,
-		hasTimeout: true,
-		visible:    true,
-		name:       "restart",
-		timeout:    -1,
-	},
-	"restore":  &restoreCmd{},
-	"snapshot": &snapshotCmd{},
-	"start": &actionCmd{
-		action:  shared.Start,
-		visible: true,
-		name:    "start",
-	},
-	"stop": &actionCmd{
-		action:     shared.Stop,
-		hasTimeout: true,
-		visible:    true,
-		name:       "stop",
-		timeout:    -1,
-	},
-	"version": &versionCmd{},
-}
-
-// defaultAliases contains LXC's built-in command line aliases.  The built-in
-// aliases are checked only if no user-defined alias was found.
-var defaultAliases = map[string]string{
-	"shell": "exec @ARGS@ -- login -f root",
-
-	"cp": "copy",
-	"ls": "list",
-	"mv": "move",
-	"rm": "delete",
-
-	"image cp": "image copy",
-	"image ls": "image list",
-	"image rm": "image delete",
-
-	"image alias ls": "image alias list",
-	"image alias rm": "image alias delete",
-
-	"remote ls": "remote list",
-	"remote mv": "remote rename",
-	"remote rm": "remote remove",
-
-	"config device ls": "config device list",
-	"config device rm": "config device remove",
-}
-
-var errArgs = fmt.Errorf(i18n.G("wrong number of subcommand arguments"))
-
-func findAlias(aliases map[string]string, origArgs []string) ([]string, []string, bool) {
-	foundAlias := false
-	aliasKey := []string{}
-	aliasValue := []string{}
-
-	for k, v := range aliases {
-		foundAlias = true
-		for i, key := range strings.Split(k, " ") {
-			if len(origArgs) <= i+1 || origArgs[i+1] != key {
-				foundAlias = false
-				break
-			}
-		}
-
-		if foundAlias {
-			aliasKey = strings.Split(k, " ")
-			aliasValue = strings.Split(v, " ")
-			break
-		}
-	}
-
-	return aliasKey, aliasValue, foundAlias
-}
-
-func expandAlias(config *lxd.Config, origArgs []string) ([]string, bool) {
-	aliasKey, aliasValue, foundAlias := findAlias(config.Aliases, origArgs)
-	if !foundAlias {
-		aliasKey, aliasValue, foundAlias = findAlias(defaultAliases, origArgs)
-		if !foundAlias {
-			return []string{}, false
-		}
-	}
-
-	newArgs := []string{origArgs[0]}
-	hasReplacedArgsVar := false
-
-	for i, aliasArg := range aliasValue {
-		if aliasArg == "@ARGS@" && len(origArgs) > i {
-			newArgs = append(newArgs, origArgs[i+1:]...)
-			hasReplacedArgsVar = true
-		} else {
-			newArgs = append(newArgs, aliasArg)
-		}
-	}
-
-	if !hasReplacedArgsVar {
-		/* add the rest of the arguments */
-		newArgs = append(newArgs, origArgs[len(aliasKey)+1:]...)
-	}
-
-	/* don't re-do aliases the next time; this allows us to have recursive
-	 * aliases, e.g. `lxc list` to `lxc list -c n`
-	 */
-	newArgs = append(newArgs[:2], append([]string{"--no-alias"}, newArgs[2:]...)...)
-
-	return newArgs, true
-}
-
-func execIfAliases(config *lxd.Config, origArgs []string) {
-	newArgs, expanded := expandAlias(config, origArgs)
-	if !expanded {
-		return
-	}
-
-	path, err := exec.LookPath(origArgs[0])
-	if err != nil {
-		fmt.Fprintf(os.Stderr, i18n.G("processing aliases failed %s\n"), err)
-		os.Exit(5)
-	}
-	ret := syscall.Exec(path, newArgs, syscall.Environ())
-	fmt.Fprintf(os.Stderr, i18n.G("processing aliases failed %s\n"), ret)
-	os.Exit(5)
-}
diff --git a/lxc/.#main.go b/lxc/.#main.go
deleted file mode 120000
index 4abc121..0000000
--- a/lxc/.#main.go
+++ /dev/null
@@ -1 +0,0 @@
-cnb at f24vm1.2369:1472136537
\ No newline at end of file


More information about the lxc-devel mailing list