2015-12-11 4 views
2

Я пытаюсь выяснить, существует ли программа в Linux, и я нашел это article. Я попытался выполнить это из моей программы, и он продолжает давать мне ошибку, говоря, что он не может найти «команду» в моей $ PATH, чего следует ожидать, поскольку это встроенная команда в Linux, а не двоичная. Итак, мой вопрос заключается в том, как выполнять встроенные команды linux из программ go?Как выполнить linux встроенную команду в golang

exec.Command("command", "-v", "foo") 

ошибка: EXEC: «Команда»: исполняемый файл не найден в $ PATH

ответ

4

Так же, как эта статья говорит, «команда» является оболочкой встроенной. Вы можете сделать это самостоятельно, пройдя через exec.LookPath.

Если необходимо, вы можете либо использовать систему which бинарная, или вы можете выполнить command внутри оболочки,

exec.Command("/bin/bash", "-c", "command -v foo") 
+0

А я вижу. Спасибо за решение. – Konoha

+0

Для пользователей bash 'type' предпочтительнее над' which' (последний - скрипт). –

+0

Также обратите внимание, что в этом году у bash была серьезная ошибка безопасности, хотя это было исправлено. Но если у вас есть выбор, предпочитайте стандартную оболочку 'sh' (обычно это Dash) для всех сценариев на стороне сервера. –

1

В качестве альтернативы, если он встроен в команду, которая не требует параметров, которые вы могли бы сделать что-то вроде следующего:

package main 

import (
    "fmt" 
    "log" 
    "os/exec" 
) 

func main() { 
    out, err := exec.Command("uuidgen").Output() 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("%s", out) 
} 

Это распечатайте уникальный идентификатор вроде следующего: 4cdb277e-3c25-48ef-a367-ba734ce407c1 так же, как назвав его непосредственно из командной строки.

Смежные вопросы