これは初めてのことです。最初の例として、.bashrc
を私の.bash_profile
から入手しようとしています - ~/.bashrc
がシンボリックリンクであっても。の.bash_profile
:
if [ -f ~/.bashrc ] && ! [ -L ~/.bashrc ]
then
# ~/.bashrc is a regular file. Source it!
source ~/.bashrc
echo "~/.bashrc found."
elif [ -L ~/.bashrc ]
then
# ~/.bashrc is a symbolic link.
# Recursivly follow symbolic links.
location="~/.bashrc"
while [ -L $location ]
do
# QUESTION: Control-Flow never reaches this point.
# Follow link on macOS.
location="$(readlink $path)"
done
# Check if final target is regular file. Source it!
if [ -f $location ]
then
source $location
echo "Symlink to .bashrc found."
fi
else
echo "No valid .bashrc found."
fi
これは私が私のコードが何を期待するものである:
~/.bashrc
がシンボリックリンクが、通常のファイルでない場合:出典それ。~/.bashrc
がシンボリックリンクであればそうでない場合:- 限り、対象がシンボリックリンクされ続けるようシンボリックリンクに従ってください。
- 最終的なターゲットが通常のファイルの場合:ソースはです。
- その他:をあげてください。
テストとして、元のファイル.dotfiles/.bashrc
にシンボリックリンク~/.bashrc
を作成しました。私のコードはelif
を意図して入力しますが、悲しいことにwhile
-loopの本文には入りません(~/.bashrc
はシンボリックリンクなので、私は期待しています)。
ここでは何が起こっていますか?私はlocation
の変数の割り当ては何とか間違っていると思います。
将来的には、あなたが望むことをしていないコードの特定の部分だけを含めるように質問を分解してみてください。実際の問題とは何の関係もないここにはたくさんのものがあります。 http://stackoverflow.com/help/mcveを参照してください。 (問題がどこにあるのか分からない場合は、最初に何がうまくいかないかを知るために、各コマンドをログに記録して何かを実行するために 'bash -x'を使用すると、それを絞り込むのに役立ちます)。 –
ところで、http://shellcheck.net/であなたのコードを実行し、見つかったものを修正してください - あなたが今までにホームディレクトリを持っていたとしても、不十分な引用のため微妙なバグが残っています。名前には 'IFS'の文字が含まれていました。 –