编写一个多行别名命令:
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
发布于 2022-10-18 12:51:49
它正在更改到该目录。但是,您可以在别名中使用():这将创建一个子subshell。在子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函数都比别名更好。
https://stackoverflow.com/questions/74111239
复制相似问题