makefile:foreach 错误

发布于 2024-11-18 14:55:37 字数 521 浏览 2 评论 0原文

我的 makefile 中有这个,

 rcFiles =  .vim .vimrc .gitconfig .hgrc .screenrc .Xresources .dircolors .bashrc .ctags .bash_completion.d
 install:
     @$(foreach f,$(rcFiles), [ -f $(HOME)/$f ] || ln -v -s $(PWD)/$f $(HOME)/ ;  )

如果 .bashrc 退出并且我尝试

 make install

得到

 ln: creating symbolic link `/home/user/.vim': File exists
 ln: creating symbolic link `/home/user/.bash_completion.d': File exists

并且进程被中止。 为什么没有条件阻止这个问题呢?

I have this in my makefile,

 rcFiles =  .vim .vimrc .gitconfig .hgrc .screenrc .Xresources .dircolors .bashrc .ctags .bash_completion.d
 install:
     @$(foreach f,$(rcFiles), [ -f $(HOME)/$f ] || ln -v -s $(PWD)/$f $(HOME)/ ;  )

if .bashrc exits and I try

 make install

I get

 ln: creating symbolic link `/home/user/.vim': File exists
 ln: creating symbolic link `/home/user/.bash_completion.d': File exists

and the process is aborted.
why no prevented this problem the conditional?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

肥爪爪 2024-11-25 14:55:37
ln -sfvn source target

--force 标志使其替换现有链接
如果链接已经存在,则 --no-dereference 避免为目录链接创建“子目录”链接(对于 .bash_completion.d.vim 有用 dirs)

rcFiles =  .vim .vimrc .gitconfig .hgrc .screenrc .Xresources .dircolors .bashrc .ctags .bash_completion.d
 install:
     @$(foreach f,$(rcFiles), [ -f $(HOME)/$f ] || ln -v -f -n -s $(PWD)/$f $(HOME)/ ;  )

或者

     @$(foreach f,$(rcFiles), [ -e $(HOME)/$f ] || ln -v -f -n -s $(PWD)/$f $(HOME)/ ;  )

不仅检测文件 (-f),还检测目录。您可能想要明确检查文件和目录 [ -f ... || -d ...]

ln -sfvn source target

The --force flag makes it replace an existing link
The --no-dereference avoids creating 'subdirectory' links for links to directory, if the link existed already (useful for the .bash_completion.d and .vim dirs)

rcFiles =  .vim .vimrc .gitconfig .hgrc .screenrc .Xresources .dircolors .bashrc .ctags .bash_completion.d
 install:
     @$(foreach f,$(rcFiles), [ -f $(HOME)/$f ] || ln -v -f -n -s $(PWD)/$f $(HOME)/ ;  )

Alternatively

     @$(foreach f,$(rcFiles), [ -e $(HOME)/$f ] || ln -v -f -n -s $(PWD)/$f $(HOME)/ ;  )

To not only detect files (-f) but also directories. You might want to explicitely check for files and directories [ -f ... || -d ... ].

﹉夏雨初晴づ 2024-11-25 14:55:37
[ -f $(HOME)/$f ]

仅当 $(HOME)/$f 是(扩展为)文件时才为 true。您遇到错误的内容(.vim.bash_completion.d)是目录。请尝试这样做:(

[ -e "$(HOME)/$f" ]

双引号并不是绝对必要的,但如果 $(HOME)/$f 扩展为包含 shell 元字符的内容,它可以为您节省麻烦。)

[ -f $(HOME)/$f ]

is true only if $(HOME)/$f is (expands to) a file. The things you're getting errors on (.vim and .bash_completion.d) are directories. Try this instead:

[ -e "$(HOME)/$f" ]

(The double quotes are not strictly necessary, but will save you grief in the event that $(HOME)/$f were to expand to something with shell metacharacters in it.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文