【问题标题】:Bash ~ Access directory that may change, from script within sub-directories of directoryBash ~ 访问可能改变的目录,来自目录子目录中的脚本
【发布时间】:2017-02-05 07:27:21
【问题描述】:

我对 bash 及其工作方式有点陌生,但我想知道在 bash 中是否有访问可能由于用户在 bash 中安装它的位置而改变其地址的目录。 (这种情况时有发生,所以一定有)

例如: 我有一个程序,其目录为../program-directory/..

但是随后用户下载了/extra-directory/中的程序文​​件,造成了我们有/extradirectory/program-directory的情况

然后我有一个在 ../program-directory/script-directory/script/example.bash 中运行的 bash 脚本

然后我想从example.bash 脚​​本中grep -rnw 'sample text' /program-directory

有没有什么简单的方法可以让我在program-directory 中使用 grep 而不用担心用户安装此程序的位置

仅供参考,我查看了Can a Bash script tell which directory it is stored in?,但我需要从../program-directory 的子目录中调用的脚本中grep 到../program-directory

【问题讨论】:

  • 这是一个非常令人困惑的描述,我不确定你在问什么。你是说(在你的最后一行)你需要记住一个目录,以便以后能够切换回它?如果是这样,$OLDPWD 会保存 $PWD 的先前值。但是,您最好发布一些代码来显示您正在尝试做什么、您期望发生什么以及如果您走到了那一步,它会在哪里失败。
  • 你只是想要一个相对路径,如grep -rnw 'sample text' ../..
  • 抱歉我写的最后一行很愚蠢,我只是想用 example.bash 脚本访问 ../program-directory
  • @ccarton 是的,我想是的

标签: linux bash scripting grep directory


【解决方案1】:

如果您的程序在 /some/example/dir/program-directory/script-directory/script/example.bash 中,并且您想在文件 /some/example/dir/program-directory/sample.txt 上运行 grep,那么您可以编写 bash 代码:

main() {
    local DIR="$(dirname "$0")"
    local DIR="$(cd "${DIR}" && pwd)"
    cd "${DIR}"
    grep 'search term' -- ../../sample.txt
}

上面的代码有许多变体,含义相同或略有不同。编写此代码是为了清楚和正确处理带有空格和特殊字符的目录名称。此代码故意忽略当前工作目录(据我所知,这是您想要的)。

【讨论】:

    最近更新 更多