Mac OS X でバッチ (.command) ファイルの現在の場所を指定する方法

Mac OS X でバッチ (.command) ファイルの現在の場所を指定する方法

ダブルクリックして作業するバッチ ファイル (.command) があります。同じフォルダー内のファイルに依存していますが、.command ファイルをダブルクリックすると、起動して現在の場所が /~ であると想定されます。

相対アセットを参照できるように、スクリプト自体で .command ファイルの場所を見つけたり指定したりするにはどうすればよいでしょうか?

答え1

bash を使用している場合 (つまり、スクリプトが で始まる場合#!/bin/bash)、$BASH_SOURCE を使用してスクリプトのファイル名を取得できます。そこから、スクリプトがあるディレクトリを取得できます。

mydir="$(dirname "$BASH_SOURCE")"

...そして、それを使用してスクリプトに関連するファイルを検索しますcp "$mydir/fileInTheSameFolder" /tmp(ここで行ったように、常に二重引用符で囲んでください)。

これは相対パスである可能性があることに注意してください。たとえば、スクリプトが を使用して対話型シェルから実行された場合./scriptname.command、単に "." として出力されます。スクリプトが別の場所に cd しない限り、これは問題にはなりませんが、完全なパスが必要な場合は、代わりに以下を使用できます。

mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || {
    echo "Error getting script directory" >&2
    exit 1
}

または、cdスクリプトの先頭でスクリプトのディレクトリに移動することもできます。

cd "$(dirname "$BASH_SOURCE")" || {
    echo "Error getting script directory" >&2
    exit 1
}

関連情報