为什么不能 cd 到目标文件夹?



编写多行别名命令:

alias cdvf='(ID=$(id -u $USER);
gvfs_uri="mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data";
echo "$gvfs_uri";
dfolder="/run/user/$ID/gvfs/""$gvfs_uri";
echo "$dfolder";
cd "$dfolder")'

跟踪运行时命令:

set -x

现在将别名粘贴到控制台中,调用我的别名--cdvf:它从未进入目标文件夹/Android/data,但最后一个命令被解析为由bash生成的+ cd '/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'

debian@debian:~$ cdvf
++ id -u debian
+ ID=1000
+ gvfs_uri='mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'
+ echo 'mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'
mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data
+ dfolder='/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'
+ echo '/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'
/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data
+ cd '/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'
debian@debian:~$ 
debian@debian:~$ cd '/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'
+ cd '/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data'
debian@debian:/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data$ 
debian@debian:/run/user/1000/gvfs/mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data$ 

将最后一行复制到终端并运行,它进入了目标文件夹,为什么cdvf不能进入目标文件夹/Android/data

正在更改到该目录。但是,您在别名中使用():这将创建子shell。在子shell中,您在正确的目录中,但随后子shell退出,您在以前所在的目录中(在"当前"shell中(。

删除别名中的括号。

我假设您使用括号来避免变量污染shell。你需要使用一个函数:

cdvf() {
local ID gvfs_uri dfolder
ID=$(id -u "$USER")
gvfs_uri="mtp:host=Xiaomi_Redmi_10A_IJLZKJLNNRLBSSVO/Internal shared storage/Android/data"
echo "$gvfs_uri"
dfolder="/run/user/$ID/gvfs/$gvfs_uri"
echo "$dfolder"
cd "$dfolder"
}

正如别名中bash手册所说

对于几乎所有用途,shell函数都比别名更受欢迎。

最新更新