我在 Windows 上使用 msysgit 来使用 git,但我经常想通过 Windows 风格的*.lnk
快捷方式导航。我通常通过 Windows 的资源管理器管理我的文件结构,因此使用不同类型的快捷方式(例如在 git 中创建硬链接或软链接)是不可行的。我该如何通过这种类型的快捷方式导航?
例如:
PCUser@PCName ~
$ cd Desktop
PCUser@PCName ~/Desktop
$ ls
Scripts.lnk
PCUser@PCName ~/Desktop
$ cd Scripts.lnk
sh.exe": cd: Scripts.lnk: Not a directory
是否可以改变这种行为,这样它就不会出现错误,而是直接转到目录的位置?或者,是否有命令可以获取文件中的路径*.lnk
?
编辑: 我听说过与之相反对于 cygwin,允许您创建一个与 explorer 一起工作的符号链接。
答案1
*咳咳*
FileGetShortcut, %1%, shortcut_target
FileAppend, %shortcut_target%, *
ExitApp
将.EXE
文件放入%小路%目录。我将我的目录命名为follow.exe
。
现在,您可以.LNK
使用以下语法有效地跟踪工作目录中的 Windows 文件:
cd `follow Shortcut.lnk`
哪里Shortcut.lnk
目标是有效目录。
示范:
设置完成后follow.exe
,您可以将以下 shell 函数添加到文件中~/.bashrc
,以进一步简化语法。谢谢,丹尼尔!
function cd
{
if [[ ".lnk" = "${1:(-4)}" && -f "$1" ]] ;
then builtin cd "$( follow "$1" )" ;
else builtin cd "$1" ;
fi
}
现在,您只需使用!即可关注.LNK
文件。cd
cd Shortcut.lnk
示范:
答案2
目前似乎还不可能,建议的方法是使用连接点公用事业:
更新:
谢谢劉劉曉感谢您的回答。
但是,在我的例子中,有时 bash 自动完成功能会在/
快捷方式后面放置一个,例如cd /f/downloads/scripts.lnk/
,所以我用它作为借口来玩 bash 脚本并调整脚本,同时检查不可接受的快捷方式(损坏或指向文件):
cd() {
shopt -s nocasematch
if [[ -z "$1" ]];
then
echo Error: missing operand;
return 1;
fi;
if [[ "$1" == "/" ]];
then
destination=$1;
else
destination=${1%/};
fi;
extension=${destination##*.}
if [[ -f "$destination" && $extension == "lnk" ]];
then
finaldestination=`follow "$destination"`;
if [[ -z "$finaldestination" ]];
then
echo Error: invalid destination;
return 2;
fi;
if [[ -f "$finaldestination" ]];
then
echo Error: destination is a file;
return 3;
fi;
builtin cd "$finaldestination";
else
builtin cd "$destination";
fi;
}
答案3
msys
可以cmd
通过以下标志从内部打开快捷方式/C
:
cmd //C "C:\Shortcut.lnk"
如果它是文件夹的快捷方式,它将被打开。斜线必须逃脱所以 msys 不会转换/C
为C:\
。
相对路径同样有效,简单路径不需要引号。如果文件lnk
位于当前文件夹中:
cmd //C Shortcut.lnk
答案4
如果你创建一个符号链接(mklink /D <link name> <target dir>
从具有管理员权限的 cmd 使用)而不是快捷方式,git bash 可以使用 来跟踪它cd -P <link name>
。