cd到由流水线命令确定的目录

时间:2018-08-29 17:40:03

标签: bash

我正在尝试解析包含路径的窗口标题,然后使用cd到该目录。我的命令成功返回了我想去的目录,但是尝试CD时遇到了奇怪的问题。窗口标题如下所示:C:\path\to\directory\file.cpp (bullet point)- Program name。 由于带有奇怪的子弹点的符号,我决定在。在.cpp中,然后获取它认为是子目录但实际上是文件的父目录。仍然可以正常工作。命令是

cd $(dirname $(tasklist -fi "imagename eq sublime_text.exe" -fo list -v | grep "Window Title" | cut -f1 -d. | cut -d: -f2- | cut -c 2-) | sed 's/^/"/ ;s/$/"/')

当我用echo替换cd时,我得到"C:\path\to\directory",而当我简单地键入cd并复制粘贴此引用路径时,我就得到了它。但这在命令中不起作用,我得到了bash: cd: "C:\Users\twilliams\Documents\GitHub\Native\mcs\src\Lib": No such file or directory。我也曾尝试像这样在cd和dirname命令周围加上引号

cd "$(dirname "$(tasklist -fi "imagename eq sublime_text.exe" -fo list -v | grep "Window Title" | cut -f1 -d. | cut -d: -f2- | cut -c 2-)" | sed 's/^ /"/;s/$/"/')"

另外,我使用echo而不是sed进行了尝试

cd "$(echo "\"$(dirname "$(tasklist -fi "imagename eq sublime_text.exe" -fo list -v | grep "Window Title" | cut -f1 -d- | cut -d: -f2- | cut -c 2-)") \"")"

在所有这些情况下,我在回显时都会得到正确的"C:\path\to\directory"输出,并手动执行此路径操作

我在Windows上使用git bash。有想法吗?

1 个答案:

答案 0 :(得分:3)

停止插入文字引号-与语法引号不同,它们被视为目录名称本身的一部分,并且系统上没有名为"C的驱动器或名为directory"的目录。这很简单,只需执行sed调用即可:

cd "$(dirname "$(tasklist -fi "imagename eq sublime_text.exe" -fo list -v |
                 grep "Window Title" |
                 cut -f1 -d. |
                 cut -d: -f2- |
                 cut -c 2-)")"

顺便说一句,我还建议使用cygpath将Windows样式的文件名转换为不需要处理cygwin专用魔术的本地UNIX格式的文件。