myBash.bash
というbashファイルがあるとします。次の場所にあります。
/myDirect/myFolder/myBash.bash
ここで、スクリプト内で文字列/myDirect/myFolder
(myBash.bash
の場所)を使用します。この場所を見つけるために使用できるコマンドはありますか?
編集:アイデアは、そのZipファイル内のbashスクリプトによって開始できるコードでZipフォルダを設定したいということです。私はそのZipファイル内のコードの相対ファイルパスを知っていますが、絶対パスは知っていません。それらが必要です。 1つの方法は、パスにハードコーディングするか、ファイルのパスを変数として指定することです。ただし、bash-fileがそれ自体の場所を把握し、Zip-fileの構造に関する知識から他のファイルへの関連パスを作成することが可能である場合、私は簡単だと思います。
次のような完全なパスを取得できます。
realpath "$0"
そして Sergが指摘 のようにdirname
を使用して、このようにファイル名を削除できます
dirname "$(realpath $0)"
または、難しいファイル名での厄介な引用やワード分割を防ぐために
temp=$( realpath "$0" ) && dirname "$temp"
それを解析することであった私の以前のアイデアよりもはるかに良い(私はもっと良い方法があると知っていた!)
realpath "$0" | sed 's|\(.*\)/.*|\1|'
realpath
は、ファイルの実際のパスを返します$0
はこのファイルです(スクリプト)s|old|new|
old
をnew
に置き換えます\(.*\)/
/
の前の文字を保存して後で\1
保存された部分スクリプトがパスにある場合、次のようなものを使用できます
$ myloc=$(dirname "$(which foo.sh)")
$ echo "$myloc"
/path/to/foo.sh
編集:Sergからのコメントを読んだ後、これはスクリプトがパスにあるかどうかに関係なく機能する一般的な解決策かもしれません。
myloc==$(dirname "$(realpath $0)")
dirname "$myloc"
受け入れられた答えは完璧なようです。これを行う別の方法を次に示します。
cd "$(dirname "$0")"
/bin/pwd
pwd
組み込みコマンドとは異なり、/bin/pwd
はディレクトリの実際のパスを出力します。