首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不准确的[ -L $location ]或[ -f $location ]当location=“~/..bashrc”时

不准确的[ -L $location ]或[ -f $location ]当location=“~/..bashrc”时
EN

Stack Overflow用户
提问于 2016-09-17 21:06:41
回答 2查看 66关注 0票数 1

这是我第一次用bash编程做些什么。作为第一个例子,我试图从我的.bashrc中获取.bash_profile --即使~/.bashrc是一个符号链接。

.bash_profile

代码语言:javascript
复制
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是一个符号链接:
    • 只要目标始终是一个符号链接,就遵循符号链接。
    • 如果最后的目标是一个常规文件:源它。

  • 否则:放弃吧。

作为测试,我创建了一个指向原始文件~/.bashrc的符号链接.dotfiles/.bashrc。我的代码按预期进入elif,但遗憾的是从未进入while-loop的主体(正如我所预期的,因为~/.bashrc是一个符号链接)。

这里发生什么事情?我认为location的变量赋值在某种程度上是错误的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-17 21:25:47

取代:

代码语言:javascript
复制
location="$(readlink $path)"

通过以下方式:

代码语言:javascript
复制
location="$(readlink $location)"

备注:

  1. 变量path从未定义过。我相信你打算将readlink应用于location
  2. 如果您有GNU readlink (在Linux、自制软件等上可用),那么可以使用-f选项来消除循环的需要。
  3. 通常,shell变量应该在双引号中引用,除非希望shell将单词拆分、倾斜展开和路径名展开应用于变量的值。 例如,在下面的行中,我们需要倾斜展开。因此,~/需要在引号之外: 位置=~/..bashrc 一旦完成,脚本中引用location的部分应该是双引号。例如: Location=“$”(重新链接“$location”) 这变得非常重要,例如,如果文件或路径名称包含空格。
票数 1
EN

Stack Overflow用户

发布于 2016-09-17 21:28:48

这导致了以下问题:

代码语言:javascript
复制
location="~/.bashrc"

倾斜扩展不发生在双引号中,也不发生在

代码语言:javascript
复制
[ -L $location ]

都不是。

所以,不要在赋值中使用双引号,或者使用

代码语言:javascript
复制
location="$HOME/.bashrc"

或者类似的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39551754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档