このディレクトリ構造を皮切り:このファイルのソースは2回目とは異なる動作をするのはなぜですか?
$ tree
.
├── 1
│ └── 2
│ └── foo.jar
└── a
└── b
└── c
└── setAlias
目標はsetAliasの内容を思い付くことですので、私はファイルをソースすることができ、そしてそれはjava -jar /absolute/path/to/foo.jar
ここで私はですが実行され、エイリアスを作成します。これまで持っている:
FOO="java -jar $(realpath $(dirname $_)/../../../1/2/foo.jar)"
echo "Setting Alias:"
echo " foo -> $FOO"
alias foo='$FOO'
直接、独自のIソースsetAlias
場合は、すべてが正常に動作します。しかし、私は、ルートディレクトリからそれを設定した場合、私はabsouluteパスが解決される前に、それを2回実行する必要があります。
$ source a/b/c/setAlias
realpath: ./../../../1/2/foo.jar: No such file or directory
Setting Alias:
foo -> java -jar
$ source a/b/c/setAlias
Setting Alias:
foo -> java -jar /home/MatrixManAtYrService/1/2/foo.jar
私は./a/b/c
からこれを行う場合はパスが最初の試行で解決されます。
ここで何が起こっているかなぜrealpathは2つのファイルを見つけようとしますか?
bashのマンページには、非常に長い時間、次の行が含まれています。「ほぼすべての目的のために、エイリアスはシェル関数に取って代わられています。 IOW、エイリアスを使用しない*。ただ停止する。 –
私は心にそれを取ることを確認します。なぜ私は代わりに関数をエクスポートするとは思わなかったのか分かりません。 – MatrixManAtYrService