【问题标题】:Aliases in .bash_profile not working properly [closed].bash_profile 中的别名无法正常工作[关闭]
【发布时间】:2015-04-02 01:42:56
【问题描述】:

我一直在尝试更改根目录中的 .bash_profile,但遇到了一些问题。我在 OS X、Yosemite 和 Macbook Pro 上。据我了解, .bash_profile 文件包含在打开终端应用程序和启动 bash shell 时自动调用的脚本。 这是我目前在那个文件中写的:

PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

这工作得很好。但是,我想添加一个别名(在上面两行的正下方),如下所示:

alias test='cd ..'

但是,当我保存并启动终端时,我收到以下消息:

-bash: alias: ..": not found

用双引号替换单引号没有帮助,也没有完全删除它们。然而奇怪的是,以下别名有效:

alias c=clear

当我在终端中键入 c 时,它会清除屏幕,正如您所期望的那样。但是,如果我改为在 bash 配置文件中使用引号输入这一行:

alias c='clear'

然后每当我在终端输入 c 时,我都会得到以下信息:

-bash: 'clear': command not found

请注意,我在启动时没有收到此别名的错误消息。

我做错了什么?我需要更改某个设置以使别名正常工作吗?我看过以前的别名示例,但它们根本不适合我。

【问题讨论】:

  • 您使用哪个编辑器来修改文件?如果它使用与 Word 的“智能引号”等效的东西,就可以解释这种行为。
  • 您是直接从终端提示符复制并粘贴错误消息(尤其是后者),还是重新输入?如果您重新输入,如果您走复制粘贴路线可能会有所帮助,因此我们可以检查所使用的确切字符。
  • 听起来你的话很有趣。单引号应该是 ASCII 撇号(ASCII 39),而不是某种花哨的花哨的大括号。
  • 我在文本编辑中打开了文件。你是说这个问题可能是我的编辑造成的吗?
  • 这正是他们所说的。

标签: macos bash terminal .bash-profile


【解决方案1】:

用户级别的“系统”文件需要包含“纯文本”。如何为您的“选择编辑器”设置/配置它可能会有所不同(我不使用 Mac,所以我没有太多帮助。)所以,

  1. 通过直接附加行来“从外壳”创建您的个人资料,即删除“坏行,然后:

    echo "一些命令字符串" >> ~/path/bash_profile

  2. use 'vi' or 'vim' ## should be 'safe'

  3. 通过以下方式查看您的文件:

    cat -v ~/path/bash_profile |更多 ## 看到任何“有趣的字符”吗?或
    cat -ve ~/path/bash_profile |更多 ## 看到任何“有趣的字符”吗?或

vi ~/path/bash_profle # then set 'control codes' to 'on'
set list ## see any 'funny chars' for your 'quotes'?

【讨论】:

  • 选项 1 对我有用。在我这样做了一次之后,我能够直接在 TextEdit 中继续在 .bash_profile 中编辑和添加新命令,而不会出现进一步的问题。
  • 纯文本编码是什么? UTF-8?
  • 问题是文本编辑器的编码。当我在 VI (OS X) 中修改文件并保存时,它起作用了!
【解决方案2】:

用双引号包裹命令对我有用。我正在尝试这个线程中提到的所有可能的方法,但没有一个有效。然后我将单引号替换为双引号,这很有效。

    alias mysql_start="sudo /path/to/server/mysql.server start"

【讨论】:

  • 单引号应该工作相同(或者实际上更好,很多时候;双引号对它们之间的字符串提供较弱的保护;所以任何美元符号,反引号,当您从单引号切换到双引号时,需要对文字双引号或反斜杠进行反斜杠转义)。
【解决方案3】:

我通过在 vim 或 nano 中编辑我的 .bash_profile 解决了这个问题,一些关于文本编辑的东西搞砸了,不知道为什么。

我尝试使用“open .bash_profile”在记事本中进行编辑,但是符号翻译错误。所以你必须要么 "vim .bash_profile" 要么 "nano .bash_profile"

这样做为我解决了这个问题。

【讨论】:

  • 嗨,耶利米,感谢您的回答,但是您的建议有点不清楚。您能否编辑您的答案以阐明“某事”是什么以及您为解决问题而实际编辑的内容?
【解决方案4】:

通过终端登录时,shell 似乎没有访问您的 .bash_profile。

.bash_profile 是 bash shell 的配置文件。当 bash shell 启动时,shell 将执行.bash_profile 中的命令。但是shell有很多种,不同的shell执行不同的配置文件。

终端是一个接收用户输入的软件,shell会执行命令。你可以使用cat /etc/shells列出可接受的shell。例如:

$ cat /etc/shells
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

默认 shell 是 Mac OX 上的 bash shell。但是如果你已经安装了zsh,默认的shell是zsh,当zsh shell启动时,shell会找到名为.zshrc的文件,并执行.zshrc中的命令。

可以使用echo $SHELL判断当前shell:

$ echo $SHELL
/bin/bash
-> echo $SHELL
/bin/zsh

如果你的默认 shell 是 zsh,.bash_profile 不起作用。 zsh 的配置文件是.zshrc。我猜你的问题是你的默认shell不是bash shell。例如,如果你的默认 shell 是 zsh,你应该配置 .zshrc ,只需添加

PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH

或其他配置到~/.zshrc

然后source ~/.zshrc,配置将立即生效。

【讨论】:

  • 查看 shell 列表的命令是:``` cat /etc/shells ``` 而不是 ``` cat /etc/shell ```
  • @SulavTimsina 你说得对,谢谢。
  • 这让我困惑了很久,为什么我的别名不能正常工作。非常感谢!
  • 改回 bash 和 .bass_profile 运行:chsh -s /bin/bash
【解决方案5】:

对我来说杀手是空格和单引号。 别名 test="cd .." 有效。 不要在 alias_name= 之间放置任何空格

【讨论】:

    【解决方案6】:

    对我来说,它在同一个终端上不起作用。我必须打开一个新的才能使用它。

    【讨论】:

    • 编辑文件会为以后的 shell 改变它,但是你已经运行的那个不会再次读取配置文件,除非你特别要求它。你可以source ~/.bash_profile强制它(但要明白这会导致已经运行过一次的代码再次运行,即在你编辑文件之前已经存在的任何命令。通常这是无害的,但我们不知道是什么你在那里)。
    【解决方案7】:

    我意识到 Mac 可以选择智能引号和破折号。 alias ..='cd ../'alias ..=‘cd ../‘ 不同,前者有效,后者无效。

    【讨论】:

    • 也许强调后者有花引号;某些字体的区别并不明显。
    【解决方案8】:

    如果你使用 bash,你可以在 ~/.bash_profile 或 ~/.alias_file... 中运行别名自定义自动启动,如果你使用 bash,你可以在 ~/.bashrc 中粘贴文件名别名,如果你使用 zsh,你可以在 ~/.zshrc 中运行。

    例如:

    if [ -s ~/.bash_profile ]; then
        source ~/.bash_profile;
    fi
    

    【讨论】:

      【解决方案9】:

      确保别名命令也在.bash_profile 中。这就是我的问题。

      另外,如果你只是在终端中输入别名,它应该会列出所有已知的别名命令,所以如果你没有看到你的命令,你就知道有问题了。

      【讨论】:

      • “在一起”是什么意思?它们的相对顺序应该无关紧要,除非您有代码尝试操作已定义的别名。如果您的意思是“等号两边没有空格”,那么前面的答案已经涵盖了这一点(实际上,不言而喻,您的代码中不能有拼写错误)。
      【解决方案10】:

      如果别名无法识别,请在打开终端或命令行提示符echo $SHELL 时首先确定您正在使用的 shell。对我来说是 /bin/bash 所以我会在 ~/.bash_profile

      中输入我的别名

      请注意,文件 ~/.bash_profile 可以存储两个别名以在终端会话期间调用,并在打开终端会话时自动运行这些相同的别名。下面的例子是通过 vim-software 打开一个文件来编辑文本。您可以根据需要将其更改为其他文本编辑器。你可以通过闭包方法看到区别。

      ALIAS CALLOUT(使用括号

      • 别名 editbp="vim ~/.bash_profile"

      ALIAS AUTORUN(使用 tilda

      • 别名editbp=`vim ~/.bash_profile`

      【讨论】:

      • 我不确定这是否解决了 OP 的问题,由于特定的编辑器,这似乎与坏字符有关。此外,此答案直接建议 ~/.bash_profile 不应使用对原始问题的评论建议不应使用,因此我认为您也需要解决该问题。
      猜你喜欢
      • 2012-04-20
      • 2017-09-03
      • 2018-06-27
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      相关资源
      最近更新 更多