我正在尝试解析包含路径的窗口标题,然后使用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。有想法吗?
答案 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格式的文件。