web-dev-qa-db-ja.com

シンボリックリンクとハードリンクの質問

/A/B/c.shが/X/Y/c.shにシンボリックリンクされているとしましょう。

  • C.shにコマンド「./SOMETHING」がある場合、「。」/A/B /または/ X/Y /を意味しますか?
  • ハードリンクはどうですか?
5
prosseek

.は、どちらの場合も実際には現在の作業ディレクトリです。スクリプトを保持しているディレクトリとは何の関係もありません。

[/tmp] $ echo "realpath ." > test.sh && chmod +x test.sh
[/tmp] $ /tmp/test.sh
/tmp
[/tmp] $ cd /usr/bin
[/usr/bin] $ /tmp/test.sh
/usr/bin
10
Michael Mrozek

Michaelに同意しますが、問題になる可能性のある場所の1つは$0パラメーターです。

$0の名前を調査し、使用されている記号名に基づいてさまざまなことを行うスクリプトを見てきました。

.この場合、現在直接作業していることを意味します。リンクのパスは関係ありません。実行または編集のためにファイルを参照することは、リンクのタイプに関係なく、それらの間にいくつかの differences がある場合でも、基本的に同じです。

3
gvkv

これはあなたが尋ねたものではありませんが、あなたが探しているものかもしれません...

メインスクリプトと同じディレクトリにあるサブスクリプトを見つける方法として、"$0"を使用できます。

MYPATH="$(realpath "$0")"
MYDIR="$(dirname "$MYPATH")"
"$MYDIR/otherscript" ...

メインスクリプトはシンボリックリンクされているため、最初にrealpathを使用して$0を逆参照する必要があります。引数にディレクトリ部分がない場合、dirname.を返しますが、この例では、realpathはすでに引数を絶対パスに変換しています。

2
Neil Mayhew