5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go言語からシェルスクリプトが実行できない(シェバングの必要性)

Posted at

#概要
Go言語を用いてシェルスクリプトを実行しようとしたところ、エラーになり実行できなかった。
lsなどコマンド単体での実行はでき、シェルスクリプトのみ実行できなかった。
シェルスクリプト自体は、コンソールログインした状態では実行できる状態であった。

原因としては、シェルスクリプトにシェバングがないためであった。
シェルスクリプトにシェバングを追加することで、実行可能となった。

#実行されるシェルスクリプト

test.sh
date "+%Y.%m.%d-%H.%M.%S" >> test.log

#シェルスクリプトを実行するGoプログラム

gotest.go
package main

import (
    "os/exec"
    "fmt"
)

func main() {
        out,err := exec.Command("/test.sh").Output()

        if err != nil {
                fmt.Println("Command Exec Error.")
        }

        fmt.Printf("result: \n%s", string(out))
}

#エラー原因
シェルスクリプトにシェバングが記載されていないため。
コンソールからログインしている場合は、ログイン時のシェルがいい感じにスクリプトを読み取ってくれるため、
シェバングがなくとも、シェルスクリプトは実行できる。

Goから実行する場合は、新規プロセスの生成となるため実行可能ファイル以外では、何らかの手段で起動方法を連携する必要がある。
シェバングがないと、なにも情報がないため、実行が不可能となっていた。

#対応策
シェルスクリプトにシェバングを追加した。

test.sh
#!/bin/sh   <= 追加
date "+%Y.%m.%d-%H.%M.%S" >> test.log
5
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?