终端中出现“command not found”错误,原因是bash_completion的影响。

5

我使用bash_completion来按Tab键并查看分支名称和目录。这一切都有效。为了连接bash_completion,我把它放到了我的bash_profile中:

if [ -f `brew --prefix`/etc/bash_completion ]; then
    . `brew --prefix`/etc/bash_completion
fi

现在当我启动终端时,会出现以下内容:

-bash: @MyNameHERE: command not found

如果我从bash_profile中删除第一个片段,这个问题就会消失,但是bash_completion就无法工作。有什么想法吗?
Brew Doctor结果:
Please note that these warnings are just used to help the Homebrew  maintainers with debugging if you file an issue. If everything you use Homebrew for is working fine: please don't worry and just ignore them. Thanks!

Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected header files:
    /usr/local/include/node/android-ifaddrs.h
    /usr/local/include/node/ares.h
    /usr/local/include/node/ares_version.h
    /usr/local/include/node/libplatform/libplatform.h
    /usr/local/include/node/nameser.h
    /usr/local/include/node/node.h
    /usr/local/include/node/node_buffer.h
    /usr/local/include/node/node_internals.h
    /usr/local/include/node/node_object_wrap.h
    /usr/local/include/node/node_version.h
    /usr/local/include/node/openssl/aes.h
    /usr/local/include/node/openssl/archs/aix-gcc/opensslconf.h
    /usr/local/include/node/openssl/archs/aix64-gcc/opensslconf.h
    /usr/local/include/node/openssl/archs/BSD-x86/opensslconf.h
    /usr/local/include/node/openssl/archs/BSD-x86_64/opensslconf.h
    /usr/local/include/node/openssl/archs/darwin-i386-cc/opensslconf.h
    /usr/local/include/node/openssl/archs/darwin64-x86_64-cc/opensslconf.h
    /usr/local/include/node/openssl/archs/linux-aarch64/opensslconf.h
    /usr/local/include/node/openssl/archs/linux-armv4/opensslconf.h
    /usr/local/include/node/openssl/archs/linux-elf/opensslconf.h
    /usr/local/include/node/openssl/archs/linux-ppc/opensslconf.h
    /usr/local/include/node/openssl/archs/linux-ppc64/opensslconf.h
    /usr/local/include/node/openssl/archs/linux-x32/opensslconf.h
    /usr/local/include/node/openssl/archs/linux-x86_64/opensslconf.h
    /usr/local/include/node/openssl/archs/solaris-x86-gcc/opensslconf.h
    /usr/local/include/node/openssl/archs/solaris64-x86_64-gcc/opensslconf.h
    /usr/local/include/node/openssl/archs/VC-WIN32/opensslconf.h
    /usr/local/include/node/openssl/archs/VC-WIN64A/opensslconf.h
    /usr/local/include/node/openssl/asn1.h
    /usr/local/include/node/openssl/asn1_mac.h
    /usr/local/include/node/openssl/asn1t.h
    /usr/local/include/node/openssl/bio.h
    /usr/local/include/node/openssl/blowfish.h
    /usr/local/include/node/openssl/bn.h
    /usr/local/include/node/openssl/buffer.h
    /usr/local/include/node/openssl/camellia.h
    /usr/local/include/node/openssl/cast.h
    /usr/local/include/node/openssl/cmac.h
    /usr/local/include/node/openssl/cms.h
    /usr/local/include/node/openssl/comp.h
    /usr/local/include/node/openssl/conf.h
    /usr/local/include/node/openssl/conf_api.h
    /usr/local/include/node/openssl/crypto.h
    /usr/local/include/node/openssl/des.h
    /usr/local/include/node/openssl/des_old.h
    /usr/local/include/node/openssl/dh.h
    /usr/local/include/node/openssl/dsa.h
    /usr/local/include/node/openssl/dso.h
    /usr/local/include/node/openssl/dtls1.h
    /usr/local/include/node/openssl/e_os2.h
    /usr/local/include/node/openssl/ebcdic.h
    /usr/local/include/node/openssl/ec.h
    /usr/local/include/node/openssl/ecdh.h
    /usr/local/include/node/openssl/ecdsa.h
    /usr/local/include/node/openssl/engine.h
    /usr/local/include/node/openssl/err.h
    /usr/local/include/node/openssl/evp.h
    /usr/local/include/node/openssl/hmac.h
    /usr/local/include/node/openssl/idea.h
    /usr/local/include/node/openssl/krb5_asn.h
    /usr/local/include/node/openssl/kssl.h
    /usr/local/include/node/openssl/lhash.h
    /usr/local/include/node/openssl/md4.h
    /usr/local/include/node/openssl/md5.h
    /usr/local/include/node/openssl/mdc2.h
    /usr/local/include/node/openssl/modes.h
    /usr/local/include/node/openssl/obj_mac.h
    /usr/local/include/node/openssl/objects.h
    /usr/local/include/node/openssl/ocsp.h
    /usr/local/include/node/openssl/opensslconf.h
    /usr/local/include/node/openssl/opensslv.h
    /usr/local/include/node/openssl/ossl_typ.h
    /usr/local/include/node/openssl/pem.h
    /usr/local/include/node/openssl/pem2.h
    /usr/local/include/node/openssl/pkcs12.h
    /usr/local/include/node/openssl/pkcs7.h
    /usr/local/include/node/openssl/pqueue.h
    /usr/local/include/node/openssl/rand.h
    /usr/local/include/node/openssl/rc2.h
    /usr/local/include/node/openssl/rc4.h
    /usr/local/include/node/openssl/ripemd.h
    /usr/local/include/node/openssl/rsa.h
    /usr/local/include/node/openssl/safestack.h
    /usr/local/include/node/openssl/seed.h
    /usr/local/include/node/openssl/sha.h
    /usr/local/include/node/openssl/srp.h
    /usr/local/include/node/openssl/srtp.h
    /usr/local/include/node/openssl/ssl.h
    /usr/local/include/node/openssl/ssl2.h
    /usr/local/include/node/openssl/ssl23.h
    /usr/local/include/node/openssl/ssl3.h
    /usr/local/include/node/openssl/stack.h
    /usr/local/include/node/openssl/symhacks.h
    /usr/local/include/node/openssl/tls1.h
    /usr/local/include/node/openssl/ts.h
    /usr/local/include/node/openssl/txt_db.h
    /usr/local/include/node/openssl/ui.h
    /usr/local/include/node/openssl/ui_compat.h
    /usr/local/include/node/openssl/whrlpool.h
    /usr/local/include/node/openssl/x509.h
    /usr/local/include/node/openssl/x509_vfy.h
    /usr/local/include/node/openssl/x509v3.h
    /usr/local/include/node/pthread-fixes.h
    /usr/local/include/node/stdint-msvc2008.h
    /usr/local/include/node/tree.h
    /usr/local/include/node/uv-aix.h
    /usr/local/include/node/uv-bsd.h
    /usr/local/include/node/uv-darwin.h
    /usr/local/include/node/uv-errno.h
    /usr/local/include/node/uv-linux.h
    /usr/local/include/node/uv-sunos.h
    /usr/local/include/node/uv-threadpool.h
    /usr/local/include/node/uv-unix.h
    /usr/local/include/node/uv-version.h
    /usr/local/include/node/uv-win.h
    /usr/local/include/node/uv.h
    /usr/local/include/node/v8-debug.h
    /usr/local/include/node/v8-platform.h
    /usr/local/include/node/v8-profiler.h
    /usr/local/include/node/v8-testing.h
    /usr/local/include/node/v8-util.h
    /usr/local/include/node/v8-version.h
    /usr/local/include/node/v8.h
    /usr/local/include/node/v8config.h
    /usr/local/include/node/zconf.h
    /usr/local/include/node/zlib.h

Set -xv结果:

https://raw.githubusercontent.com/SpencerRohan/debug/master/README.md

这段文字涉及到IT技术,意思是“设置-xv的结果”,并附上一个链接。请注意保留原有的HTML标签。

2
你能否更新你的问题,附上 brew doctor 的确切输出?(如果这能帮助你找到解决方案,请将其作为答案发布并接受。) - msanford
1
如果您的问题与 ~/.bash_profile 文件有关,则尝试进行调试:将此行插入文件开头:set -xv - Zsigmond Lőrinczy
1
@msanford:没有这样的文件或目录。如果我单独运行brew --prefix,我会得到/usr/local。 - Spencer Rohan
1
只需在此处引用(复制+粘贴)您获得的输出。 - Lorinczy Zsigmond
1
唯一类似的东西是一个名为 /usr/local/etc/bash_completion.d 的目录,因此您的 if 语句显然是错误的。在该目录中有 npmtmux 和其他一些软链接。我怀疑 homebrew 已经更新了更多的灵活性,而您的脚本没有考虑到这一点... - Mark Setchell
显示剩余13条评论
1个回答

1

这个:

-bash: @MyNameHERE: command not found

这是在告诉您它正在尝试执行命令@MyNameHERE,但在您的系统中找不到它。

尝试替换:

if [ -f `brew --prefix`/etc/bash_completion ]; then
    . `brew --prefix`/etc/bash_completion
fi

使用

brewPrefix=`brew --prefix`
if [ -f "${brewPrefix}/etc/bash_completion" ]; then
    . "${brewPrefix}/etc/bash_completion"
fi

我的猜测是brew --prefix的返回值中可能有一些空格导致了这个问题。
如果这还是不行,尝试在brewPrefix变量中设置完整路径(注释掉另一行#)。在.bash_profile中执行有时不像在普通终端中执行那样有效,因为环境变量不同。
还要确保该代码片段位于.bash_profile的底部。

1
替换了代码片段,它就像魔法一样奏效了。不需要完整路径。同时,将其放置在.bash_profile的底部--然而,即使不在底部也能正常工作。 - Spencer Rohan
1
然后问题99%是路径中的空格 :) - Daniele Segato

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