1. ホーム
  2. bash

[解決済み] 現在の作業ディレクトリではなく、ファイルの場所に基づく相対パス [重複]。

2022-05-26 10:01:31

質問

与えられた。

some.txt
dir
 |-cat.sh

cat.shが内容を持っている状態。

cat ../some.txt

次に ./cat.sh 内部 dir を実行している間は問題なく動作します。 ./dir/cat.sh と同じレベルで dir と同じレベルにあるのにできません。これは、作業ディレクトリが異なるためだと予想しています。簡単にできる方法はありますか? ../some.txt の位置からの相対パスを cat.sh ?

どのように解決するのですか?

スクリプトの絶対パスを取得することです。 ${BASH_SOURCE[0]} で取得できます) そして、これを用いて親ディレクトリと cd をスクリプトの冒頭でそれに追加します。

#!/bin/bash
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )

cd "$parent_path"
cat ../some.text

これにより、シェルスクリプトはどこから起動しても動作するようになります。実行するたびに、あたかも ./cat.sh の内部で dir .

このスクリプトは、スクリプトを直接(シンボリックリンクではなく)呼び出した場合のみ動作することに注意してください。)