在 MacOS 机器上的 bash shell 中,我可以通过输入看到ls
有一个导演Application Support
:
$ ls
Accounts FontCollections PreferencePanes
Application Scripts Fonts Preferences
Application Support GameKit Printers
Assistant Google PubSub
Assistants Group Containers Safari
Audio IdentityServices SafariSafeBrowsing
Caches Input Methods Saved Application State
Calendars Internet Plug-Ins Screen Savers
CallServices Keyboard Services
ColorPickers Keyboard Layouts Sharing
Colors KeyboardServices Sounds
Compositions Keychains Spelling
Containers LanguageModeling Suggestions
Cookies LaunchAgents SyncedPreferences
CoreFollowUp Library VirtualBox
Developer Logs Voices
Dictionaries Mail WebKit
F5Networks Messages com.apple.internal.ck
Family Metadata iMovie
Favorites Mobile Documents
FileProvider Passes
但是,如果我尝试cd
使用引号或转义字符进入该目录,如中所述如何进入名称中包含空格的目录?,我仍然收到错误:
LM-SJN-21018636:Library kupeek$ cd "Application Support"
-bash: cd: Application: No such file or directory
LM-SJN-21018636:Library kupeek$ cd Application\ Support
-bash: cd: Application: No such file or directory
看起来 bash 并没有“拾取”引号或转义符,而是在寻找名为“应用程序”的目录。有什么想法可以解释为什么它不起作用吗?
答案1
您的cd
函数或别名可能定义不明确。运行type -a cd
以找出原因。
可能的别名解释如下另一个答案。我的回答集中在 shell 函数上。
例如,如果使用函数
command cd $*
(command
内置解释这里) 或者command cd $@
或者command cd $1
而不是正确的
command cd "$@"
或者command cd "$1"
(不如上面的好,但仍然不是致命的)
并且你的 Bash 没有抛出错误too many arguments
(4.4 之前的版本,请参阅这个问题),其行为将与您描述的完全一样,因为Application Support
作为函数的单个参数,它会在函数内部进行分词,因此command cd
将被视为Application
其第一个参数。
如果你的cd
函数确实定义不明确,那么你应该跟踪它的定义位置并进行修复。一个特别指定解决方法是在command
之前添加单词cd
,如下所示:
command cd "Application Support"
或者
command cd Application\ Support
(如果别名是罪魁祸首,这也会起作用)。
答案2
尝试使用多组引号,
例如,将名称放在双引号内的单引号中:
cd "'Application Support'"
“用双引号括起来的参数即使包含空格分隔符,也会显示为一个单词。”高级 Bash 脚本指南
使用两组引号(引号内的引号)是一种可行的解决方法,假设这里的问题是原始cd
命令已被别名化。以下定义
alias cd='eval command cd'
将重现此处报告的问题(在 Bash 4.4 之前的版本中,请参阅这个答案)。 碰巧的是,eval
第二次解析命令行,在第一次解析时,一层引号被删除。 使用两组引号是可行的,因为删除第一组引号后,eval
会将带有第二组引号的参数传递给cd
。
如果存在这样的别名,最好的解决方案就是首先修复它。
答案3
可能还有更多您看不到的空白或其他不可打印字符。请尝试cd Application*Scrip*
或类似操作。
答案4
这是因为您漏掉了一个单词。请尝试使用:
cd "Application Support GameKit"