![将当前目录更改为以标识符为子字符串的目录](https://linux22.com/image/973663/%E5%B0%86%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%9B%B4%E6%94%B9%E4%B8%BA%E4%BB%A5%E6%A0%87%E8%AF%86%E7%AC%A6%E4%B8%BA%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%9B%AE%E5%BD%95.png)
我的终端当前位于主目录中,主目录中有一个以“round”为子字符串的目录。有没有办法直接切换到该目录而不输入目录的完整名称?比如不执行:
cd dir_name
或者
cd identifier
为什么以下命令打开辅助提示符而不是更改目录
cd ls | grep identifier
答案1
遗憾的是,使用 bash 无法做到这一点。您可以做的最接近的事情是,如果标识符位于文件名的开头,请按TabBash 自动完成。遗憾的是,如果标识符位于文件名的中间或结尾,这将不起作用,在这种情况下,我建议改用允许这样做的 zsh。
由于两个原因,此命令cd ls | grep identifier
没有奏效,首先,您尝试切换到名为 的目录ls
,然后将 stdout(为空)通过管道传输到 grep 以查找“identifier”。如果您按照 clement 的建议使用子 shell,则可以解决此问题cd $(ls | grep identifier)
。但这有其他问题,ls 输出以列为单位,而 grep 按行工作。因此,如果我尝试在以下输出中 grep“sites”,则会出现以下结果:
➜ ls
autoreviewcomments.user.js build.sh build.xml README.md src
build.properties build.sites dist SDK
➜ ls | grep sites
build.properties build.sites dist SDK
或者在某些情况下,颜色会妨碍cd
,因此必须指定“无颜色”:
cd $(ls | grep --no-color sites)