如何在Mac OS X中运行终端时找出别名(在bash意义上)的定义

Ric*_*uhr 52 bash terminal alias

如何找出系统中定义别名的位置?我指的是从Mac OS X(10.6.3)启动的终端会话中使用的别名.

例如,如果我alias在终端命令提示符下输入没有参数的命令,我会得到一个我设置的别名列表,例如:

alias mysql='/usr/local/mysql/bin/mysql'
Run Code Online (Sandbox Code Playgroud)

但是,我使用Spotlight和mdfind各种启动文件搜索了我的系统,到目前为止还找不到定义此别名的位置.(我很久以前就这样做了,并没有写下我指定别名的地方).

cwe*_*kly 46

对于OSX来说,这个两步序列对我来说很有用,可以找到我很久以前创建的别名,并且找不到预期的位置(〜/ .zshrc).

cweekly:~ $ which la
la: aliased to ls -lAh

cweekly:~$ grep -r ' ls -lAh' ~
/Users/cweekly//.oh-my-zsh/lib/aliases.zsh:alias la='ls -lAh'
Run Code Online (Sandbox Code Playgroud)

啊哈!"隐藏" ~/.oh-my-zsh/lib/aliases.zsh.我曾经在.oh-my-zsh中捅了一下但忽略了lib/aliases.zsh.

  • @lacostenycoder,您可能在命令末尾省略了“~”参数,没有它,grep 将等待解析任何输入,而不是在本地跨文件搜索。 (2认同)

gho*_*g74 30

您只需在alias命令提示符下输入以查看您拥有的别名即可.否则,您可以find在定义别名的最常见位置执行操作,例如

grep -RHi "alias" /etc /root
Run Code Online (Sandbox Code Playgroud)

  • 选项:`-R,-r,--recursive`:递归搜索列出的子目录,`-H`:总是打印带有输出行的文件名标题,`-i,--ignore-case`:执行不区分大小写的匹配。默认情况下,grep 区分大小写。 (3认同)

jas*_*ard 23

首先使用以下命令

列出所有函数

functions 
Run Code Online (Sandbox Code Playgroud)

列出所有别名

alias 
Run Code Online (Sandbox Code Playgroud)

如果您没有找到别名或函数,请考虑使用更积极的搜索方法

bash 版本

bash -ixlc : 2>&1 | grep thingToSearchHere
Run Code Online (Sandbox Code Playgroud)

zsh版本

zsh -ixc : 2>&1 | grep thingToSearchHere
Run Code Online (Sandbox Code Playgroud)

选项的简要说明

-i     Force shell to be interactive.

-c     Take the first argument as a command to execute

-x      -- equivalent to --xtrace

-l      Make bash act as if invoked as a login shell
Run Code Online (Sandbox Code Playgroud)


six*_*ude 15

此外,这些是标准的bash配置文件

  • / etc/profile文件
  • 〜/ .bash_profile或〜/ .bash_login或〜/ .profile
  • 〜/ .bash_logout中
  • 在〜/ .bashrc

更多信息:http://www.heimhardt.com/htdocs/bashrcs.html

  • `/ etc/bashrc`也被看了. (2认同)
  • 在某些机器上,`/etc/bashrc` 可能被命名为 `/etc/bash.bashrc`。无论如何,它在我的 Debian 7 机器上。 (2认同)

Sto*_*vey 7

派对有点晚了,但我遇到了同样的问题(试图找到"l."命令在RHEL6中别名的位置),并最终出现在之前答案中未提及的位置.它可能在所有bash实现中都找不到,但如果/etc/profile.d/目录存在,请尝试在那里使用不明原因的别名.那是我发现的地方:

[user@server ~]$ grep l\\. /etc/profile.d/*
/etc/profile.d/colorls.csh:alias l. 'ls -d .*'
/etc/profile.d/colorls.csh:alias l. 'ls -d .* --color=auto'
/etc/profile.d/colorls.sh:  alias l.='ls -d .*' 2>/dev/null
/etc/profile.d/colorls.sh:alias l.='ls -d .* --color=auto' 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

bash联机帮助页中未提及该目录,并且它不是bash搜索概要文件/启动信息的正确部分,但在RHEL的情况下,您可以在/ etc/profile中看到调用代码:

for i in /etc/profile.d/*.sh ; do
  if [ -r "$i" ]; then
    if [ "${-#*i}" != "$-" ]; then
      . "$i"
    else
      . "$i" >/dev/null 2>&1
    fi
  fi
done
Run Code Online (Sandbox Code Playgroud)


Ric*_*uhr 1

我找到了答案(我一直盯着正确的文件但错过了明显的)。

我的例子中的别名是在文件 ~/.bash_profile 中定义的

不知怎的,这让我无法理解。