The*_*One 33 linux command-line terminal.app linux-terminal macos
OS X 终端中默认可用的命令似乎不像他们的 linux 版本。如何用实际的 GNU linux 命令替换所有这些命令?
例如 sed -i 需要一个烦人的附加 "" 参数。此外,它仅适用于文本文件。这是没用的。
all*_*tic 43
在一般情况下,您根本不能(或不应该)替换默认命令。原因是许多系统管理脚本和第三方软件包可能依赖于这些命令来运行它们在 OS X 上开箱即用的方式。
因此,如果您只是删除系统命令并将它们替换为具有不兼容行为或命令行参数的 GNU 等效项,则可能会破坏某些内容。特别是如果您使用一些最初设计为在 Linux 或 BSD 上运行后“移植”到 Mac OS X 的软件,因为这些类型的程序更有可能依赖于 shell 脚本和系统命令,而不是调用 OS X API。
您可以做的是安装一个环境,在另一个目录中安装 GNU 实用程序而不覆盖默认值,然后调整您的PATH
环境变量,以便它在搜索系统目录之前优先考虑在 GNU 目录中找到的命令。您可以将其连接起来,以便它仅在您启动交互式 shell 时以这种方式设置您的 PATH;bash
如果你想这样做,你可以谷歌如何做到这一点或在 SU 上提出另一个问题(或搜索它,因为之前可能有人问过它)。
这种环境的一个例子是Homebrew,例如它有 GNUsed
等。安装 Homebrew 后,您可以键入
brew install coreutils
Run Code Online (Sandbox Code Playgroud)
并安装GNU Coreutils。这些将为您提供sed
,date
,printf
,wc
和许多其他工具与GNU / Linux的,而不是OS X.然而船,以免“覆盖”默认OS X的二进制文件,他们将被作为前缀g
默认。因此,在安装 Coreutils 之后,如果您想使用 GNU sed,请键入
gsed
Run Code Online (Sandbox Code Playgroud)
如果每次输入都太麻烦,您可以在 PATH 中添加一个“gnubin”目录,然后使用sed
. 您需要将以下内容添加到您的~/.bash_profile
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
Run Code Online (Sandbox Code Playgroud)
当然,如果您需要一个从头到尾的 Linux 环境(内核、X11、系统调用兼容性等),您必须在虚拟机中运行 Linux,例如VirtualBox。如果您需要运行专为在 Linux 上运行而设计的软件或脚本,这是一个安全的选择。
Homebrew 只会为某些不需要 Linux 特定行为的程序提供兼容性。例如inotify
,仅在 Linux 上可用。drm
(直接渲染管理器)仅在 Linux 上可用。还有一些其他相当低级的系统调用仅在 Linux 上可用,并且在 OS X 上不存在等效的系统调用,因此如果不进行重大代码更改,将某些程序从 Linux 移植到 OS X 可能是不切实际或不可能的。
归档时间: |
|
查看次数: |
15437 次 |
最近记录: |