如何 cd 到 .lnk 文件中链接的目录?

How to cd to directories linked in .lnk files?

在 Windows 中的 msys bash 中,我想 cd 到目录 a (Windows native) .lnk 链接。这些是标准的 Windows 快捷方式。我希望能够做到这一点:

~ $ cdlnk programs.lnk
/c/Program\ Files/ $

我已经走到这一步了:

strings "$lnk" | grep -A 1 DATA | tail -n 1

给我快捷方式链接到的路径。但是,现在我被困住了。我也可以

  1. 在 .bashrc 中创建一个别名 - 但是我不能使用管道或将参数传递给脚本,即我不能 运行 上面的代码。
  2. 制作一个脚本 cdlnk.sh - 但我只能更改它的 cd 而不是调用的 cd shell。

要同时处理参数修改当前的shell,可以使用shell function in a file that has to be sourced,例如.bashrc

对于您的命令,函数可能如下所示:

cdlnk() {
    strings "" | grep -A 1 DATA | tail -n 1
}

你可以使用 sed 代替 grep 和 tail:

cdlnk() {
    strings "" | sed -n '/DATA/{n;p;q;}'
}

其中 -n 抑制输出,并且在匹配 DATA 的行上,命令是 n(将下一行放入模式缓冲区),p(打印行)和 q(退出 - 无需查看文件的其余部分)。