Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在Mac OS 10.10+;上使用GNU';brew安装--默认名称';不再支持_Macos_Bash_Sed_Homebrew_Gnu - Fatal编程技术网

Macos 如何在Mac OS 10.10+;上使用GNU';brew安装--默认名称';不再支持

Macos 如何在Mac OS 10.10+;上使用GNU';brew安装--默认名称';不再支持,macos,bash,sed,homebrew,gnu,Macos,Bash,Sed,Homebrew,Gnu,在Mac OS 10.10.3下,我通过键入以下命令安装了gnu-sed: brew install gnu-sed --default-names 当我再次键入时,我会收到以下消息: gnu-sed-4.2.2已安装 然而,即使重新启动系统并重新启动终端,我仍然不能使用sed的GNU版本。例如: echo a | sed ’s_A_X_i’ $ echo "Calimero is a little chicken" > test $ cat test Calimero is a li

在Mac OS 10.10.3下,我通过键入以下命令安装了gnu-sed:

brew install gnu-sed --default-names
当我再次键入时,我会收到以下消息:

gnu-sed-4.2.2已安装

然而,即使重新启动系统并重新启动终端,我仍然不能使用sed的GNU版本。例如:

echo a | sed ’s_A_X_i’
$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken
返回: 替换命令“i”中的错误标志

我应该怎么做才能让GNU版本正常工作? 以下是$PATH变量中的路径

/Users/WN/-myUnix
/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Applications/calibre.app/Contents/MacOS
/opt/ImageMagick/bin
/usr/texbin 

如果我的问题显而易见,我很抱歉,但我正在自学shell脚本,还不太了解UNIX程序是如何安装的。在Mac上使用符合GNU的命令(在本例中是sed,但很快我也需要其他命令)而不会造成损坏或不必要的混乱,对此我们将不胜感激。

OS X附带的
sed
位于
/usr/bin

homebrew
安装的
sed
位于
/usr/local/bin

如果您喜欢使用
自制
one,您有两种选择:

选项1

每次要使用
自制
sed
,请键入

/usr/local/bin/sed
或者,最好是

选项2

在登录配置文件的路径中向前移动
/usr/local/bin/
(即之前)
/usr/bin
,如下所示

 export PATH=/usr/local/bin:<other places>
导出路径=/usr/local/bin:

如果您需要将gnu sed命令与它们的正常名称一起使用,您可以 可以从bashrc向路径添加“gnubin”目录。只需在bash或终端中使用以下命令

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

安装Mac OS X的GNU版本的
sed
时,请使用:

$ brew install gnu-sed
您使用的程序是gsed

例如:

echo a | sed ’s_A_X_i’
$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken
另外,为了补充在Mac OS X上使用GNU命令工具,这里有一篇很好的博客文章,可以从linux获得这些工具:

注(2019年):

带有默认名称的
--选项自2019年1月起生效,因此现在该选项不再可用

安装时,如果要使用不带
g
前缀的sed,自制软件会指示如何调整路径


您已经安装了gnu sed,但没有使用默认名称的
——选项

  • 使用
    ——使用默认名称
    选项,它将
    sed
    安装到
    /usr/local/bin/
  • 如果没有该选项,它将安装gsed
所以在你的情况下,你要做的是:

$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names
如果需要,请更新路径

$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'
或者按照其他人的建议使用
gsed

--默认名称在Mac OS X 10.14.2上对我不起作用,因此我创建了一个名为
sed
gsed
的符号链接,位于
$PATH


我还创建了一个名为
sed.1
的符号链接到
gsed.1
手册页,位于
$MANPATH
的较高位置,因此
man
将访问
gsed
手册页,而不是默认的
sed
手册页

$brew install gnu sed

$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
使用这两个命令,gnu-sed可以正常工作

此导出路径=“/usr/local/opt/gnu-sed/libexec/gnubin:$PATH”


仅当您重新启动GONE(Mojave)时,每个终端会话才有效。

brew在哪里安装了GNU
sed
?该目录在您的
路径上吗?如果键入
sed--version
,会得到什么结果?(BSD
sed
将投诉;GNU
sed
将报告其版本信息。)除非您在
/usr/bin
前面的路径上有
brew
目录,或者您学会使用GNU
sed
的绝对路径名,否则您将无法运行GNU
sed
。也要小心引用
是一个字处理引号,与
不同。您也可以使用alias,例如
alias sed=gsed
——不再支持默认名称选项。请记住,这只适用于当前终端会话,如果您将其添加到
。bashrc
(如果您使用bash作为shell)或者
.zshrc
如果您使用zsh作为shell,则每次登录时都会执行它。苹果过去默认使用
bash
作为shell,但在Catalina,它将默认shell切换为
zsh
。您可以通过在终端窗口中运行
w
来判断您的帐户设置为使用哪一个帐户-您将得到一系列行,其中一些行(在我的情况下,我使用zsh)看起来像
jpb s000-Sun20 1day-zsh
-zsh
显示我的帐户正在使用
zsh