Ich habe festgestellt, dass es einige Unterschiede zwischen dem Dienstprogrammbefehl gibt, den ich unter Mac OSX und Linux verwendet habe. Ich möchte meine Erfahrung vereinen.
Wie kann ich alle meine Mac-Dienstprogramme durch GNU-Dienstprogramme ersetzen?
Dies fügt symbolische Links für GNU-Dienstprogramme mit dem Präfix g hinzu /usr/local/bin/
:
brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep
Siehe brew search gnu
für andere Pakete. Wenn Sie die Befehle ohne ag-Präfix verwenden möchten, fügen Sie beispielsweise /usr/local/opt/coreutils/libexec/gnubin
vor anderen Verzeichnissen auf Ihrer PATH
.
$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20 (208 files, 9.4M)
/usr/local/Cellar/coreutils/8.21 (210 files, 9.6M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==> Caveats
All commands have been installed with the prefix 'g'.
If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
shiny-and-gnu.rb
siehe github.com/al-the-x/homebrew-mine/usr/local/opt/coreutils/libexec/gnuman:
, anscheinend war ursprünglich MANPATH nicht enthalten. Nachdem ich die MANPATH-conf in meinem bashrc auskommentiert hatte, bekam ich nichts von ecoh $MANPATH
. Und natürlich, wenn ich benutze man pwd
, habe ich das BSD-Handbuch bekommen. Wie kann man das beheben?findutils
müssen Sie hinzufügen, PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
was nicht in der Ausgabe der Installationskonsole angegeben ist.findutils
, fügen Sie diese außerdem zu Ihrer hinzu$MANPATH
/usr/local/opt/findutils/share/man
MANPATH
, um den Standardsystemwert beizubehalten, ist: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. Der Schlüssel liegt im Konstrukt ${var-default_value}
.utilDir=coreutils/8.25; cp -a /usr/local/Cellar/${utilDir}/libexec/gnubin/* ~/bin
Ändern Sie einfach die utilDir
für jeden Satz von Dienstprogrammen, die Sie verknüpfen möchten. Dann kann ich einfach `PATH="/home/me/bin:$PATH" setzen, ohne so ein Durcheinander mit verschiedenen Verzeichnissen zu machen.find
oder ein anderes gängiges Programm verwenden, was Sie immer erkennen können, wenn Sie einen Fehler find
ohne ein Verzeichnisargument erhalten.PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
hat geholfen. Danke!Außerdem brew install coreutils
müssen Sie möglicherweise auch einige andere Pakete installieren, z. B. gnu-sed
, grep
:
brew install findutils
brew install gnu-indent
brew install gnu-sed
brew install gnutls
brew install grep
brew install gnu-tar
brew install gawk
Beachten Sie, dass die --with-default-names
Option seit Januar 2019 entfernt wurde, sodass jede Binärdatei dem Pfad hinzugefügt werden muss, wenn sie ohne das g
Präfix verwendet werden soll.
Alte Referenz (sofern --with-default-names
verfügbar): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/
brew install gawk
(im Gegensatz zu allen anderen) awk
(über einen symbolischen Link /usr/local/bin/awk
) ersetzt wird. Wenn Sie das Original behalten möchten /usr/bin/awk
, einfachrm /usr/local/bin/awk
ping
verfügbar?ping
ein Linux-Kernel-Dienstprogramm: github.com/iputils/iputilsIch bin mir nicht sicher, ob ich empfehlen würde , sie zu ersetzen ; Sie können sie jedoch in einem anderen Pfad installieren und auf diese Weise verwenden. Alles in allem, wenn Sie von Linux kommen und Zugang zu "allgemeineren" *nix-Hilfsprogrammen und einem apt-ähnlichen System wünschen, dann würde ich empfehlen, sich Macports anzusehen: http://www.macports.org
Es ermöglicht beispielsweise die Verwendung des neuesten "generischen" GCC im Gegensatz zu/zusätzlich zu Apples enthaltenem GCC, nur als Beispiel.
/opt/local/libexec/gnubin
vor Ihrer PATH
Umgebungsvariable hinzufügen.Ich habe ein Skript geschrieben, um genau das zu tun! Das Skript kann hier (oder unten) eingesehen werden. Ich kann jedoch nicht immer garantieren, dass dieser Beitrag die neueste Version des zuvor verlinkten Skripts widerspiegelt.
Beim Ausführen des Skripts wird Homebrew installiert (falls noch nicht geschehen), alle zugehörigen GNU-Dienstprogramme werden installiert (falls noch nicht geschehen) und die PATH
Variable wird aus den installierten Dienstprogrammen erstellt.
#!/bin/bash
# Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
m4 make nano file-formula git less openssh python rsync svn unzip vim \
--default-names --with-default-names --with-gettext --override-system-vi \
--override-system-vim --custom-system-icons
# Empty the .bash_path file that holds GNU paths
[[ -f ~/.bash_path ]] && mv ~/.bash_path ~/.bash_path.orig
# Build PATH variable script in ~/.bash_path
for i in /usr/local/Cellar/*/*/bin; do
echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnubin; do
echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/share/man; do
echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnuman; do
echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`
if [ "$PATCH" == "" ]; then
# Add Ubuntu-style PS1 to .bash_profile
cat <<EOF > ~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
# Add .bash_path to .bash_profile
echo "source ~/.bash_path" >> ~/.bash_profile
fi
Ich habe ein Skript geschrieben, das die macOS-CLI transparent in ein frisches GNU/Linux-CLI-Erlebnis umwandelt
https://github.com/fabiomaia/linuxify
git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install
Es ermöglicht Ihnen auch, alles einfach rückgängig zu machen.
./linuxify uninstall
git clone git@github.com.:fabiomaia/linuxify.git
) auszuführen, hieß es zuerst: "Die Authentizität des Hosts 'github.com' kann nicht festgestellt werden usw.". Ich tippte yes
und drückte Enter. Dann hieß es: git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Was ist los?git clone https://github.com/fabiomaia/linuxify.git
Als Alternative zum Setzen der Umgebungsvariablen PATH und MANPATH (was ich eigentlich empfehlen würde) ist es auch möglich, Binärdateien wie folgt mit einem vorhandenen PATH-Speicherort zu verknüpfen:
Sie müssen wissen, wo Homebrew coreutils
Binärdateien installiert.
/usr/local/opt/coreutils/bin
In /usr/local/opt
diesem Verzeichnis speichert Homebrew relativ statische Dateien, die sich zwischen Updates wahrscheinlich nicht ändern.
Dann können Sie von dort aus symbolische Links zu einem Ort erstellen, der sich bereits auf Ihrem PATH befindet. Es muss ein Pfad sein, der früh auf PATH geladen wird, weil der PATH nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ durchsucht wird. /usr/local/bin
ist eine gute Wahl basierend auf der Betrachtung von echo $PATH
.
which sha256sum # prove it is not on PATH
ln -s /usr/local/opt/coreutils/bin/sha256sum /usr/local/bin/
which sha256sum # prove it is on PATH
Auf diese Weise wäre es fast genauso einfach, symbolische Links zu erstellen. In einigen Fällen, z. B. wenn Sie eine strengere Kontrolle wünschen, ist dies eine gute Option, anstatt ein ganzes Verzeichnis zu Ihrem PATH und MANPATH hinzuzufügen.
lhf
Dennis
cwd
homebrew
wie unten erwähnt zu verwenden und dann einfach zu lernen, die Dienstprogramme mit zu verwenden ag
(gsed
,greadlink
, etc ), anstatt die Systemdienstprogramme zu ersetzen.Dan Pritts
Ray Foss
--with-default-names
betrifft nur den lokalen Benutzer. Es könnte ein Problem mit Mac-orientierten Terminaldienstprogrammen sein, aber wenn Sie Homebrew für alles verwenden, können Sie auch so tun, als würden Sie Linux verwenden. Gemischt mit iterm2 funktioniert es großartig für mich, ich kann im Grunde so tun, als wäre ich mit meinen Linux-Boxen zu Hause.smci
Zearin
cp
undmv
kann für die erweiterten Attribute der Datei gefährlich sein (z. B. Tags, unsichtbar, Alias, Bündel und mehr). Einzelheiten finden Sie in diesen beiden Artikeln: brettterpstra.com/2014/07/03/… brettterpstra.com/2014/07/04/how-to-lose-your-tags Sie sind ein wenig veraltet, aber ich möchte nur erhöhen die Warnung, damit Sie untersuchen können, ob Sie GNUs verwendenmv
undcp
Ihre Anforderungen beeinträchtigen.kambunt
De Novo
kochen
Code Noviziat
kochen