$HOMEサブディレクトリ内でドットファイルを管理し、$HOME内でシンボリックリンクを設定するシェルスクリプトを作成しようとしています。
#!/bin/sh
for i in .cvsignore .gitconfig .npmrc .tmux.conf .zprofile .zshrc; do
ln -s $i ~/$i
done
何らかの理由で、このスクリプトは壊れたシンボリックリンクを生成し続けます。
file {~/*,~/.*} | grep "broken symbolic link" | cut -d: -f1
/home/user/.cvsignore
/home/user/.gitconfig
/home/user/.npmrc
/home/user/.tmux.conf
/home/user/.zprofile
/home/user/.zshrc
ベストアンサー1
シンボリックリンクは次のようになるため壊れます。
.cvsignore -> .cvsignore
など。
シンボリックリンクを作成するとき
ln -s source target
これにより、これはあなたが書いた方法をtarget
正確に指すシンボリックリンクになります。source
したがって、欠落しているのはソースへのパスです(ここでは$PWD
現在のディレクトリの絶対パスを保持する変数を使用します)。
ln -s "$PWD/$i" "$HOME/$i"
位置している場合がほとんどですターゲットリンクを作成するとき:
ln -s some/dir/where/the/file/is mylink
リンク(リンクが指すパス)は絶対的であるか、リンク位置に相対的でなければなりません。