如何在Mac OSX终端中进入一个别名目录

66

如何使用“cd”命令从shell进入别名目录?它总是返回“htdocs”不是目录的错误。

编辑:我使用操作系统的GUI制作了快捷方式 ->右键单击htdocs目录,选择“别名…”(如果不是alias,则可能在英语中称为shortcut?),然后将其移动到我的主目录下(因为我打开终端时从那里开始)。

我想要的只是打开终端并输入“cd htdocs”,以便我可以从那里开始工作。

7个回答

79

我更喜欢这种方法。谢谢。 - Hass
在自己找到解决方案后,我不想再转发你的解决方案了。它更有用,也更符合 Linux 的风格! - Fydo
3
它能够使用,但我感觉这违背了使用别名的初衷。那么,使用别名和符号链接有什么优势呢?@jaepage - Michael Dimmitt
那么接下来你需要调用什么? - utdev
2
请注意以下微妙的区别:ln -s ~/Documents/books ~/Desktop(会尝试创建名为/Destop的符号链接并失败),与带有斜杠的ln -s ~/Documents/books ~/Desktop/,它会在/Desktop/下创建一个符号链接——这是ln -s ~/Documents/books ~/Desktop/books的简写。 - Beni Cherniavsky-Paskin

15
我只想打开终端,然后输入 cd htdocs,这样我就可以从那里工作。 更简单的方法可能是忽略符号链接,并将您的htdocs目录的父目录添加到CDPATH环境变量中。 当您键入cd foo以查找列出的目录之一中的foo目录时,bash(1)会检查CDPATH环境变量的内容。无论您当前的工作目录是什么,都能正常工作且比设置符号链接更容易。 如果您的htdocs路径位于 /srv/www/htdocs/,那么您可以使用CDPATH=/srv/www。然后,cd foo将首先查找/srv/www/foo/并在存在时切换到它;如果不存在,则在当前工作目录中查找foo并在存在时切换到它。(如果您的系统上有多个htdocs目录,这可能会让人感到困惑; 在这种情况下,CDPATH=.:/srv/www会让您轻松地切换到子目录,但仍然使用/srv/www/htdocs/版本,如果没有./htdocs目录存在。) 您可以将CDPATH=/srv/www添加到您的~/.bashrc文件中,以便每次启动终端时都起作用。

这个答案比我的更好,因为它允许完整路径自动完成,例如:cd htdocs/another/directory。而我的答案需要你知道你想要哪个子目录(没有自动完成)。 - Gibron
3
提醒一下:OS X的alias文件不是符号链接,尽管其功能类似于硬链接和符号链接的组合。它主要由OS X Finder支持,并起源于Classic Mac OS的早期时期。在Shell编程中使用alias文件并不简单。OS X也支持标准符号链接和硬链接。 - Ned Deily
@Ned,非常好,谢谢;我已经删除了完全错误的段落。我没有预料到苹果会在文件系统层面之上使用机制... - sarnold
@Gibron,但是变量中有一些很好的简单性,这是我完全忽视了的。 :) - sarnold
非常优雅的解决方案,唯一的缺点是当你从任何地方使用cd命令时,你会得到你添加的路径的自动补全。个人而言,我使用cd命令的首字母并等待自动完成,所以我觉得这个解决方案有点烦人。 - Isu

13

我个人使用这个方法快速地在我的Mac电脑中一个卷内深层目录中工作。

打开你的~/.bash_profile文件,通过添加以下内容创建一个目录的别名:

alias cdh="cd /Volumes/Haiku/haiku/src/apps/superprefs"

保存后,重新启动终端。现在在终端中键入cdh应该会将工作目录更改为别名所提到的目录。


2
可能需要执行 source ~/.bash_profile. ~/.bash_profile 命令。需要在 Ubuntu 上执行此操作,现在需要在实际的 OSX 上进行测试。 - roger

7
我不确定OSX如何暴露别名链接,但由于您正在使用bash,您可以在.bashrc文件中创建一个变量。
在其单独的一行上放置:
```bash alias yourAliasName='yourCommand' ```
htdocs=YourDirectoryPath/

一旦您重新启动bash,您只需键入cd $htdocs

我发现这是最不令人困惑的方法。谢谢! - cfx

4

您提供的链接似乎可以解决问题,但是需要进行大量工作。不过,还有其他解决方案吗?能否给出一些解释呢? - SMBiggs
@ScottBiggs 看第二个链接,有更简短的解释。 - ThomasW

2

尝试:

alias cdgo=`echo cd /root/go/`

运行cdgo命令,然后输入"cd /root/go/",它将改变当前终端进程中的目录。

在我的CentOS上可以正常工作,但未在OSX上进行测试。


2
您可以使用osascript来实现此操作--下面的命令似乎有效:
``` cd "`osascript -e "on run aFile" -e "set aFile to POSIX file aFile as alias" -e "tell application "\""Finder"\"" to return POSIX path of ( ( original item of aFile ) as text ) " -e "end run" path_to_my_Finder_alias 2>/dev/null`" ```
基本上,这个命令运行一个AppleScript,在子shell中找到参数(path_to_my_Finder_alias)的目标路径,然后用双引号括起来,并将目录更改为该路径。
也许有些更擅长bash的人可以将其转换为bash别名或函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接