我对bash及其工作方式有点新意,但我想知道无论如何在bash中访问一个可能因地址而改变的目录,因为用户在bash中安装它。 (这种情况一直都在发生,所以必须有)
例如:
我有一个目录为../program-directory/..
然后用户下载/extra-directory/
中的程序文件,创建了/extradirectory/program-directory
然后我有一个在../program-directory/script-directory/script/example.bash
然后我想从grep -rnw 'sample text' /program-directory
脚本
example.bash
我可以在program-directory
中使用任何简单的方法,而无需用户安装此程序的麻烦
仅供参考,我查看了Can a Bash script tell which directory it is stored in?,但我需要在../program-directory
../program-directory
进行grep
答案 0 :(得分:1)
如果你的程序在/some/example/dir/program-directory/script-directory/script/example.bash
,并且你想在文件grep
上运行/some/example/dir/program-directory/sample.txt
,那么你用bash代码写一下:
main() {
local DIR="$(dirname "$0")"
local DIR="$(cd "${DIR}" && pwd)"
cd "${DIR}"
grep 'search term' -- ../../sample.txt
}
上面的代码有很多变体,含义相同或略有改变。编写此代码是为了清楚起见并正确处理带有空格和特殊字符的目录名称。这段代码故意忽略了当前的工作目录(据我所知,这就是你想要的)。