【问题标题】:How can I access a directory that is in $HOME using bash? [duplicate]如何使用 bash 访问 $HOME 中的目录? [复制]
【发布时间】:2018-10-01 19:42:44
【问题描述】:

我是 Linux 和 bash 的新手。我制作了一个脚本来访问位于主目录中的文件夹,但并不总是从主目录调用该脚本。从任何子目录调用它时我得到的提示指定它找不到该文件。

这是我正在尝试做的一个示例:

for entry in "~/.directory"/*
do
    echo "$entry"
done

如果我将脚本放在 /home 的子目录中并尝试调用它,则脚本无法找到该目录。我知道它存在,就好像我在子目录中运行 ls ~/.directory 一样,它能够找到文件并毫无问题地打印它们。我应该尝试以不同的方式访问 bash shell 中的目录吗?谢谢!

投票结束我的问题。这对我来说似乎相当具体,一般的解决方案是我之前发现的,也发布在下面的 cmets 中。我最终会弄清楚的-

【问题讨论】:

  • 改用$HOME
  • @MarkSetchell 我将行更改为 'for entry in "$HOME/.directory"/* 但仍然得到相同的打印输出,指定:“无法访问'.directory':没有这样的文件或目录”。
  • 也许您还没有名为$HOME/.directory 的目录。试试ls -ld $HOME/.*
  • @user3657449 听起来HOME 变量有问题。 echo "'$HOME'" | LC_ALL=C cat -vt 打印什么?
  • @MarkSetchell 该脚本运行良好,并在从主目录调用脚本时识别 $HOME 变量。我尝试了 ls -ld $HOME/.* 并且我在脚本中寻找的目录出现了。

标签: bash directory


【解决方案1】:

只有未加引号的代字号会被展开。

for entry in ~/".directory"/*

【讨论】:

  • 我尝试将波浪号移到引号之外,但仍然找不到目录。
  • 您是否遇到实际错误,或者您显示的循环是否根本不产生输出?例如,如果您的脚本有 DOS 行尾,那么您的模式将在 * 之后有一个回车符,这意味着您的模式可能不会匹配任何内容。
  • 我得到'ls:无法访问'.directory':没有这样的文件或目录'。
  • @user3657449 您需要将~/ 都移到引号之外——~/".directory"/* 可以工作,但~"/.directory"/* 不行。顺便说一句,引用部分中是否有任何 shell 元字符(空格、通配符等)?如果没有,您可以完全去掉引号。
  • 我将斜线和波浪线都移到了引号之外。我会尝试删除引号。目录名称中没有空格或通配符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2013-12-28
  • 1970-01-01
相关资源
最近更新 更多