#概要
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