Разделение массива из строки не работает в bash - PullRequest
0 голосов
/ 14 января 2020

У меня есть скрипт bash, в котором я получаю ответ API в формате строки. Ответ имеет следующий формат:

стек тестирования foo bar по потоку

Теперь у меня есть следующий скрипт bash для преобразования его в массив и дальнейшей обработки:

#!/bin/bash

result=$(curl "API URL")
resp=($result)
for i in "${resp[@]}"
do
    echo "$i" 
done

Проблема:

Если я запускаю этот скрипт вручную в терминале (делая его исполняемым), он работает нормально. Но когда я пытаюсь запустить его, используя команду Golang sh

ExecuteCommand("sh /path/to/directory/test.sh")

func ExecuteCommand(command string) error{
    cmd := exec.Command("sh", "-c",command)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr

    err := cmd.Run()

    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
        return err
    }
    fmt.Println("Result: " + out.String())
    return nil
}

Это выдает ошибку:

test.sh: Syntax error: "(" unexpected

Может ли кто-нибудь помочь мне, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 14 января 2020

U также может создать ярлык из файла "test. sh":

#!/bin/bash
$ sudo ln -s /path/to/directory/test.sh /usr/bin/testSH

Если вы не root, пользователь дает разрешение на ярлык:

sudo chmod 777 / usr / bin / test SH

command := "testSH" 
cmd := exec.Command("sh", "-c",command).Run()
1 голос
/ 14 января 2020

измените эти строки в вашем примере

ExecuteCommand("/path/to/directory/test.sh")

func ExecuteCommand(command string) error{
    cmd := exec.Command(command)

Шебанг ядра перехватит #! и правильно запустите скрипт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...