编写多行别名命令:
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函数都比别名更受欢迎。