質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • bash

    678questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

【dotfiles管理】.configのリンクを貼るのに失敗しています

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 262

g104robo

score 2

前提・実現したいこと

githubを使ってdotfilesを管理しようとしています。

発生している問題・エラーメッセージ

dotfilesのリンクを貼るシェルスクリプトを書いたり、コマンドから実行したりしたのですが、一部、意図したように動作しません。
ln -snfv ~/dotfiles/.vimrc ~/.vimrc
のようにして、dotfilesディレクトリ内にあるdotfileをhomeへリンクさせようとしています。ここで.vimrcのようなファイルや.vimなどのディレクトリに対してはリンクを生成することに成功しているのですが、.configに関してリンクを生成しようとすると以下のようにリンクされてしまいます。

'/home/username/.config/.config' -> '/home/username/dotfiles/.config'


本来であれば
'/home/username/.config/' -> '/home/username/dotfiles/.config'
のようにリンクを生成して欲しいのですが、何故か1階層下の.configへのリンクを作成してしまいます。

該当のソースコード

  1 #!/bin/bash                                                                                                                                               
  2 
  3 set -u
  4 DOT_DIRECTORY="${HOME}/dotfiles"
  5 
  6 cd ${DOT_DIRECTORY}
  7 
  8 for f in .??*
  9 do
 10     #無視したいファイルやディレクトリ
 11     [ "$f" = ".git" ] && continue
 12
 13     ln -snfv ${DOT_DIRECTORY}/${f} ${HOME}/${f}
 14     #echo "${DOT_DIRECTORY}/"${f}"  :    ${HOME}/"${f}""
 15 
 16 done
 17 
 18 echo "linked dotfiles complete!"

試したこと

シェルスクリプトからだけでなく、コマンドから
$ ln -snfv ~/dotfiles/.config/ ~/.config/
を実行しましたが、同様の結果になってしまいます。
原因がわかる方がいらっしゃいましたら、教えていただけるとありがたいです。

補足情報(言語/FW/ツール等のバージョンなど)

OS: ubuntu16.04LTS

lnのバージョン:
ln (GNU coreutils) 8.25
Copyright (C) 2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
作者 Mike Parker および David MacKenzie。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

$ mv ~/.config ~/dotfiles/
を行ってからlink.shを実行すれば問題なく動作しました。

homeに.configディレクトリが存在しない状態で
$ ln -snfv ~/dotfiles/.config ~/.config
を実行することで、
'/home/username/.config/' -> '/home/username/dotfiles/.config'
のように意図した通りのリンクが貼れました。
一方で、同じコマンドでもhomeに.configディレクトリが存在する場合は
'/home/username/.config/.config' -> '/home/username/dotfiles/.config'
のように1階層下に潜ってしまいました。
同じコマンドでもリンク先のディレクトリの有無で結果が変わってしまうのが未だに腑に落ちません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • bash

    678questions

    bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。