我正在为 C++ 项目准备标头,我决定使用find
来获取其他标头文件的包含选项。要列出正确的路径,我需要使用cd
它,例如:
cd 'PATH/TO/HEADER/FILE'
find ../../../
只有这样我才能获取头目录列表以复制粘贴到头文件中。之后,我必须:
cd 'PATH/TO/MY/PROJECT'
切换回项目路径。
经常使用不方便cd
,那么我可以告诉find
command自动“跳转”到目录并搜索吗?我通读了手册页但无法弄清楚。
find PATH/TO/HEADER/FILE
不是一个解决方案,因为我故意希望路径名以../../../
.
答案1
只需在子 shell 中执行cd
and即可:find
(cd 'PATH/TO/HEADER/FILE' && find ../../..)
这样,只有子 shell 的当前工作目录受到影响。
您可以将其设为函数或脚本,此处使用 GNU realpath
:
findfrom() (
dir=${1?}; shift
reldir=$(realpath --relative-to="$dir" .) || exit
cd -- "$dir" && find "$reldir" "$@"
)
最新版本的 GNUenv
还有一个-C
/--chdir
选项,可以在执行命令之前更改工作目录:
env -C PATH/TO/HEADER/FILE find ../../..
另请注意,您始终可以cd -
返回到上次成功之前所在的目录cd
。
类似 csh 和类似 Korn 的 shell 还支持工作目录堆栈,您可以使用 和pushd
而popd
不是cd
.在 中zsh
,您可以cd
通过选项自动使用该堆栈autopushd
,并使用cd +2
, cd -2
... 导航该堆栈,或者使用数组$dirstack
或~2
, ~+2
,~-2
波形符扩展来访问它。