GNU/Linux >> Linux の 問題 >  >> Linux

bash スクリプトが .NET でソースされたときに、インストールされているディレクトリをどのように知ることができますか。オペレーター?

$(dirname "$BASH_SOURCE")を信じます あなたが調達しているファイルがない限り、あなたが望むことをします シンボリックリンク。

参照しているファイルがシンボリック リンクである可能性がある場合は、次のようにして実際のディレクトリを取得できます:

PRG="$BASH_SOURCE"
progname=`basename "$BASH_SOURCE"`

while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done

dir=$(dirname "$PRG")

エレガントな解決策は次のとおりです。

script_path="${BASH_SOURCE[0]}"
script_dir="$(cd "$(dirname "${script_path}")" && pwd)"

ただし、これはリンクを調達する場合には機能しません。その場合、そうするかもしれません

script_path="$(readlink -f "$(readlink "${BASH_SOURCE[0]}")")"
script_dir="$(cd "$(dirname "${script_path}")" && pwd)"

注意事項:

  • ${array[x]} のような配列 は POSIX 準拠ではありませんが、BASH_SOURCE とにかく、配列はBashでのみ利用可能です
  • macOS では、ネイティブ BSD readlink -f をサポートしていません 、そのため、GNU readlink をインストールする必要がある場合があります 例を使用してbrew install coreutilsで醸造 readlink を置き換えます greadlink
  • ユースケースによっては、-e を使用したい場合があります または -m -f の代わりに切り替えます さらにおそらく -n;詳細については、readlink の man ページを参照してください

問題に対する別の見方-「。」を使用している場合。環境変数を設定するために、これを行うもう 1 つの標準的な方法は、スクリプトに変数設定コマンドをエコーさせることです。例:

# settings.sh
echo export CLASSPATH=${CLASSPATH}:/foo/bar

次に、出力を評価します:

eval $(/path/to/settings.sh)

それがモジュールのようなパッケージがどのように機能するかです。この方法により、sh (X=...; export X) から派生したシェルのサポートも容易になります。 ) および csh (setenv X ... )


Linux
  1. BashスクリプトをBashにパイプするときにパラメータを設定する方法は?

  2. Bashスクリプトでは、Continueコマンドは埋め込みループでどのように機能しますか?

  3. パスが/で終わっていないときに/でパス入力が壊れることを期待するBashスクリプトを修正しますか?

  1. Bash スクリプトのスクリプト ファイル名を知るにはどうすればよいですか?

  2. bashでファイルの絶対ディレクトリを取得するにはどうすればよいですか?

  3. Git for Windows で Git Bash のディレクトリを変更するにはどうすればよいですか?

  1. 古いバージョンの Bash で Bash スクリプトをテストするにはどうすればよいですか?

  2. bashスクリプトでpythonスクリプトを強制終了する方法

  3. `less` または `more` を使用してファイルを読み取る場合、コンテンツをカラーで取得するにはどうすればよいですか?