Shell Golang 中的扩展(命令替换)
Shell Expansion (Command substitution) in Golang
Go 支持变量扩展,例如:
os.ExpandEnv("test-${USER}")`
>> "test-MyName"
但是有没有办法扩展 可执行文件 ,就像 shell 的行为方式一样?
类似于
os.ExpandExecutable("test-$(date +%H:%M)")
>> "test-18:20"
我找不到等效的方法,有没有一种优雅的方法可以代替手动提取占位符、执行然后替换它们?
没有内置函数,但您可以编写一个函数并将其传递给 os.Expand()
。
package main
import (
"fmt"
"os"
"os/exec"
"strings"
)
func RunProgram(program string) string {
a := strings.Split(program, " ")
out, err := exec.Command(a[0], a[1:]...).Output()
if err != nil {
panic(err)
}
return string(out)
}
// 然后你称它为:
func main() {
s := os.Expand("test-${date +%H:%M}", RunProgram)
fmt.Print(s)
}
这输出:
test-13:09
请注意 os.Expand()
需要大括号,即 ${command args args args}
。
Go 支持变量扩展,例如:
os.ExpandEnv("test-${USER}")`
>> "test-MyName"
但是有没有办法扩展 可执行文件 ,就像 shell 的行为方式一样?
类似于
os.ExpandExecutable("test-$(date +%H:%M)")
>> "test-18:20"
我找不到等效的方法,有没有一种优雅的方法可以代替手动提取占位符、执行然后替换它们?
没有内置函数,但您可以编写一个函数并将其传递给 os.Expand()
。
package main
import (
"fmt"
"os"
"os/exec"
"strings"
)
func RunProgram(program string) string {
a := strings.Split(program, " ")
out, err := exec.Command(a[0], a[1:]...).Output()
if err != nil {
panic(err)
}
return string(out)
}
// 然后你称它为:
func main() {
s := os.Expand("test-${date +%H:%M}", RunProgram)
fmt.Print(s)
}
这输出:
test-13:09
请注意 os.Expand()
需要大括号,即 ${command args args args}
。