首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么cd不能进入目标文件夹?

为什么cd不能进入目标文件夹?
EN

Stack Overflow用户
提问于 2022-10-18 12:47:47
回答 1查看 30关注 0票数 0

编写一个多行别名命令:

代码语言:javascript
复制
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")'

跟踪运行时逗号:

代码语言:javascript
复制
set -x

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

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-18 12:51:49

它正在更改到该目录。但是,您可以在别名中使用():这将创建一个子subshell。在子shell中,您位于正确的目录中,但随后子shell退出,并且您位于以前所在的目录中(在“当前”shell中)。

从别名中删除括号。

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

代码语言:javascript
复制
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函数都比别名更好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74111239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档