File: unshare.go

package info (click to toggle)
golang-github-containers-storage 1.59.1%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 4,184 kB
  • sloc: sh: 630; ansic: 389; makefile: 143; awk: 12
file content (38 lines) | stat: -rw-r--r-- 858 bytes parent folder | download | duplicates (5)
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
package main

import (
	"os"
	"os/exec"

	"github.com/containers/storage"
	"github.com/containers/storage/pkg/mflag"
	"github.com/containers/storage/pkg/unshare"
)

func unshareFn(flags *mflag.FlagSet, action string, m storage.Store, args []string) (int, error) {
	unshare.MaybeReexecUsingUserNamespace(true)
	if len(args) == 0 {
		shell := os.Getenv("SHELL")
		if shell == "" {
			shell = "/bin/sh"
		}
		args = []string{shell}
	}
	cmd := exec.Command(args[0], args[1:]...)
	cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
	if err := cmd.Run(); err != nil {
		return 1, err
	}
	return 0, nil
}

func init() {
	commands = append(commands, command{
		names:       []string{"unshare"},
		usage:       "Run a command in a user namespace",
		optionsHelp: "[command [...]]",
		minArgs:     0,
		maxArgs:     -1,
		action:      unshareFn,
	})
}