コマンドはシェルでは機能しますが、スクリプトでは機能しません。

コマンドはシェルでは機能しますが、スクリプトでは機能しません。

私が使用しているPythonプログラムに必要な出力を提供するこのgitスクリプトがあります。問題は、スクリプトを使用する必要があるDebian 7システムでスクリプトが機能しないことです。しかし、私のManjaro PCでは問題なく実行されます。

#!/bin/bash

branch=$1

if [[ -n "$branch" ]]; then

format=Author:%x09%an
format+=%x0aDate:%x09%ad
format+=%x0aRefs:%x09%d
format+=%x0a%x0a'%w(,4)%s'
format+=%x0a%x0a'%w(,4,4)%b'
git rev-list --pretty="$format" $branch
else
    echo "argument error"
fi

私は直接コマンドを入力しても動作します。

誰でもこの問題を解決するのに役立ちますか?

編集:私が得る最初のエラーは2 [[。これを変更すると、すべての行if [ -n "$branch" ];に対して「見つかりません」エラーが発生する型宣言が続行されます。ただし、git rev-listコマンドは機能しますが、パラメータがないため失敗します。

編集2:bash [script]代わりにスクリプトを実行するとsh [script]問題が解決します!私のManajaroコンピュータでなぜ動作するのかまだ疑問に思いますsh

ベストアンサー1

shManjaroインストールのシェルが構文または変数値に追加するために使用される構文をdash理解できない場合があります。[[ ... ]]+=

shこれは、使用する代わりにスクリプトを実行するとスクリプトの特定の行が正しく実行されない理由を説明しますbash

#!これを軽減するには、ハッシュバンクライン()が正しいパスを指していることを確認し、bashスクリプトを実行可能にしますchmod +x scriptname.sh。これにより、eg./scriptname.shを使用するように明示的に指示することなく、egを使用してスクリプトを実行できますbash

おすすめ記事