シェルスクリプトが引き続き壊れたシンボリックリンクを生成します。

シェルスクリプトが引き続き壊れたシンボリックリンクを生成します。

$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

リンク(リンクが指すパス)は絶対的であるか、リンク位置に相対的でなければなりません。

おすすめ記事