在 Mac OS X 10.10 中打开新选项卡时,终端会执行看似任意的命令

在 Mac OS X 10.10 中打开新选项卡时,终端会执行看似任意的命令

我使用的是 Mac OS X 10.10。突然,每当我打开新选项卡时,我的“终端”就会开始运行命令。这很令人沮丧,因为我习惯于在打开选项卡时立即输入,并在输入命令时执行命令。

例如,在出现此问题之前,我可以按cmd+T然后立即输入bin/rails c,当选项卡准备就绪时,bin/rails c就会出现在命令行上,我只需按 即可enter。现在,发生了以下情况:

bin/lserman-5:test lserman$ bin/cd /workspace/test/app/helpers
-bash: bin/cd: No such file or directory
lserman-5:test lserman$ rails c

运行的命令是cd /workspace/test/app/helpers,当我正在输入 时执行bin/rails c。这也是一件麻烦事,因为当我习惯于在上一个选项卡所在的相同位置打开选项卡时,终端会切换到不同的目录。例如,这是我在不立即输入任何内容的情况下按下+cd时得到的:cmdT

lserman-5:test lserman$ cd /workspace/test/app/helpers
lserman-5:helpers lserman$ 

实际命令似乎每隔几天就会改变一次。我不知道是什么原因造成的。如果我没记错的话,它似乎总是某种形式的cd。我查看了.profile.bash_profile.bashrc,没有发现任何异常。还有什么可能导致这种情况发生?

内容/etc/profile

# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
    [ -r /etc/bashrc ] && . /etc/bashrc
fi

内容/etc/bashrc

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
# Tell the terminal about the working directory at each prompt.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ] && [ -z "$INSIDE_EMACS" ]; then
    update_terminal_cwd() {
        # Identify the directory using a "file:" scheme URL,
        # including the host name to disambiguate local vs.
        # remote connections. Percent-escape spaces.
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
    }
    PROMPT_COMMAND="update_terminal_cwd; $PROMPT_COMMAND"
fi

答案1

这很令人沮丧,但调试起来应该不太难。检查/etc/profile和有点太深奥和过度了。我要检查的/etc/bash.rc第一个地方是每次打开新窗口时都会加载的用户特定的 shell 环境文件:~/.bash_profile~/.bash_login~/.profile

我猜至少其中一个文件的末尾附加了一些命令垃圾。所有这些文件的作用都是定义您的本地 Bash shell 环境,也就是您第一次打开“终端”窗口或在“终端”中打开新选项卡时看到的内容。

像这样查看每个文件;我在此示例中使用,nano但您可以随意使用您喜欢的任何纯文本编辑器

nano  ~/.bash_profile

nano  ~/.bash_login

nano  ~/.profile

cd /workspace/test/app/helpers只需在其中任何/所有命令中查找错误命令并删除该命令即可。

另外,如果您担心删除这些文件中的任何内容,只需用注释掉这些行,然后#看看会发生什么。只要命令被注释掉,它就不会运行。如果它不运行,就不会再有错误。

答案2

我刚刚完全关闭了终端,然后打开了一个新窗口,问题就解决了。只有旧窗口中的新选项卡坏了。不知道是什么问题,但是……现在问题已经消失了。

相关内容