1. ホーム
  2. linux

[解決済み] bashでファイルの絶対ディレクトリを取得するには?

2023-02-10 03:41:07

質問

入力ファイルを引数として受け取り、それを読み込むbashスクリプトを書きました。

このファイルには、使用する追加ファイルへのいくつかのパス(その場所からの相対パス)が含まれています。

私は、スクリプトが入力ファイルを含むフォルダに移動して、さらにコマンドを実行することを望みます。

そこで 入力ファイルからフォルダ(およびフォルダだけ)を取得するにはどうしたらよいでしょうか。 (linuxの場合。)

どのように解決するには?

フルパスを取得するために使用します。

readlink -f relative/path/to/file

ファイルのディレクトリを取得する。

dirname relative/path/to/file

この2つを組み合わせることもできます。

dirname $(readlink -f relative/path/to/file)

もし readlink -f がシステム上で利用できない場合は、次のようにします。 * :

function myreadlink() {
  (
  cd "$(dirname $1)"         # or  cd "${1%/*}"
  echo "$PWD/$(basename $1)" # or  echo "$PWD/${1##*/}"
  )
}

なお、相対パスで指定されたファイルのディレクトリに移動するだけなら、絶対パスを知る必要はなく、相対パスでも全く問題ないので、そのまま使ってください。

cd $(dirname relative/path/to/file)

スクリプトの実行中に)元のパスに戻りたい場合は pushd の代わりに cd であり popd を追加してください。


* 一方 myreadlink はこの質問の文脈では十分なものですが、これは readlink ツールに対していくつかの制限があります。例えば、それは、異なるを持つファイルへのリンクを正しく追跡しません。 basename .