sudo:port:命令未找到。

79

我最近卸载了Xcode 4.2并重新安装了Xcode 4.3.1。已安装命令行工具。然后,我使用来自macports.org的Lion“dmg”磁盘映像安装了MacPort。由于每次使用端口后都会收到“sudo:port:command not found”的提示,所以我按照此文此贴创建了一个.bash_profile文件(之前不存在),并将以下内容放入其中,但没有成功。

export PATH=$PATH:/opt/local/bin
export MANPATH=$MANPATH:/opt/local/share/man
export INFOPATH=$INFOPATH:/opt/local/share/info 

根据这篇文章的指引:

➜  ~ git:(master) ✗ rvm install 1.8.7 --with-openssl-dir=/opt/local
You requested building with '/usr/bin/gcc-4.2' but it is not in your path.
➜  ~ git:(master) ✗ vi .rvmrc 

rvm_archflags="-arch x86_64"

export CC="/usr/bin/gcc-4.2"

export CFLAGS="-O2 -arch x86_64"
export LDFLAGS="-L/opt/local/lib"
export CPPFLAGS="-I/opt/local/include"

重命名.bash_profile.profile

➜  ~ git:(master) ✗ vi .bash_profile
➜  ~ git:(master) ✗ mv .bash_profile .profile
➜  ~ git:(master) ✗ mv .profile              
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
➜  ~ git:(master) ✗ mv -f .bash_profile .profile
mv: rename .bash_profile to .profile: No such file or directory
➜  ~ git:(master) ✗ port
zsh: correct 'port' to 'pr' [nyae]? n
zsh: command not found: port
➜  ~ git:(master) ✗ which port
port not found
➜  ~ git:(master) ✗ 

.profile 的内容:

export PATH=$PATH:/opt/local/bin
export MANPATH=$MANPATH:/opt/local/share/man
export INFOPATH=$INFOPATH:/opt/local/share/info

1
我在安装Rails应用程序的MongoDB时,在命令行中遇到了这个错误,因此我想其他人也可能通过使用相同的关键词在Google搜索中找到这个问题。我所做的就是更新XCode并从macports.org安装MacPorts,在进行此页面上的任何其他操作之前先尝试一下。 - JGallardo
11个回答

147

首先,您可能需要编辑系统的PATH。

sudo vi /etc/paths

添加以下2行:

/opt/local/bin
/opt/local/sbin

重新启动您的终端


7
经过对 .bash_profile 的多次调查,结果发现在安装了 MacPorts 后只需要重新启动终端即可。感谢这个提示。 - Ila
我也试过了,可以用!谢谢。这应该是正确的答案。 - Felipe
请帮我一下:赏金链接:https://dev59.com/OVkS5IYBdhLWcg3w6qXU - Bista
添加这两行代码并重新启动终端后,终于成功了。之前我一直在尝试修改.bash_profile和.profile文件,但都没有用。直到我将opt/local/bin添加到etc/paths中才解决了问题。 - pimmen
这可能是某些情况下的好解决方案,但如果您没有sudo访问权限并安装了mactools,则恐怕需要另一种解决方案。 - demongolem
显示剩余4条评论

23

15
我重新启动了终端,但它又消失了 :-/ - Ava
端口。每次打开终端时,我都必须运行“source .profile”才能识别端口。 - Ava
听起来你仍然有 .bash_profile 或 .bash_login http://superuser.com/questions/366642/profile-not-loaded-osx-lion - John Barraco
解决方案的链接不再可用。 - T04435
2
为什么你会想要删除你的~/.bash_profile或者~/.bash_*呢?特别是如果你花了很多时间来配置你的bash,所有的配置都将瞬间消失,你每天使用的许多工具也将不复存在。 - milosmns
显示剩余4条评论

21

我在官方网站上找到了答案。

$ vi ~/.profile

# add the following line
export PATH=/opt/local/bin:/opt/local/sbin:$PATH

现在重新启动终端或者输入source !$(等同于source ~/.profile)。


谢谢!这是唯一最终帮助了我解决问题的方法。实际上我没有 .profile 文件,于是我创建了一个然后加入了那行代码,问题就解决了。 - Dan-Nolan
这个效果很好。 - Ender

18
你可以尝试源化你的配置文件来更新环境变量:
$ source ~/.profile

2
我如何读取我的个人资料?我该如何运行这个命令?只是在终端中输入它会出现“source: no such file or directory: .profile”的提示。 - Ava
进入您的用户目录,输入 cd $HOME 然后尝试。 - Awalias
是的,我只是在那里尝试。 - Ava
OP拥有一个.bash_profile而不是.profile文件。将该文件重命名为~/.profile,然后再尝试一次。 - Matt K
请帮我一下:赏金链接:https://dev59.com/OVkS5IYBdhLWcg3w6qXU - Bista
显示剩余2条评论

18

如果你使用zsh,请在文件'~/.zshrc'中的行'export PATH="..."'中添加以下字符串。

:/opt/local/bin:/opt/local/sbin

1
您还可以使用export MANPATH="/opt/local/share/man"设置MANPATH。如果您想在非登录shell中访问MacPorts,请在~/.zshenv中设置这些变量。 - GDP2
非常感谢。我一直在编辑.profile、.bash_profile文件,最终编辑了.zshrc文件,它起作用了。 - Vivek Mangal

8
在我的机器上,端口位于/opt/local/bin/port中 - 尝试在终端上单独输入它。

在我的bin文件夹中,只有文件(端口是一个文件)➜ bin ls daemondo port portf portindex portmirror - Ava
当你在终端中输入 `set | grep PATH' 时,会得到什么结果? - James Holwell
二进制文件(标准输入)匹配 - Ava
抱歉,不知道该从哪里开始。这可能会有所帮助:http://willbryant.net/software/mac_os_x/paths - James Holwell
我在etc文件夹里没有path.d文件夹,只有一个名为macports的文件夹。 - Ava
1
我的Mac Osx 10.8上没有/opt文件夹? - pal4life

6
如果您刚刚安装了MacPorts,只需运行命令即可使用。
source ~/.bash_profile

1

以常规用户帐户身份运行 which port 会得到什么?在新打开的终端中尝试一下。将 .bash_profile 重命名为 .profile 后再次尝试。即使没有参数,您是否可以作为普通用户运行 port ?


已添加在上方。它已被重命名。 - Ava

1
您可以很简单地添加以下行:

source ~/.profile

将以下内容添加到您的shell rc文件底部 - 如果您使用的是bash,则应该是您的~/.bash_profile,如果您使用的是zsh,则应该是您的~/.zshrc。
然后打开一个新的终端窗口并输入ports -v,您应该会看到以下类似的输出:
~ [ port -v                                                                                                              ] 12:12 pm
MacPorts 2.1.3
Entering interactive mode... ("help" for help, "quit" to quit)
[Users/sh] > quit
Goodbye

希望这有所帮助。

0

有时候你的机器可能是由 Puppet 或其他工具管理的。这种情况下,修改 root 的 .profile 或 .bash_rc 文件是无效的。 因此,你可以在你的 .profile 文件中添加以下内容。之后你就可以使用 "mydo" 代替 "sudo"。这对我来说完美地解决了问题。

function mydo() {
    echo Executing sudo with: "$1" "${@:2}"
    sudo $(which $1) "${@:2}"
}

请访问我的页面:http://www.danielkoitzsch.de/blog/2016/03/16/sudo-returns-xyz-command-not-found/


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