Saya bersimpati dengan frustrasi Anda tetapi saya percaya bahwa, dalam jangka panjang, itu akan menyebabkan frustrasi yang lebih besar jika diganti - Setelah berusaha melakukan hal yang sama saya sarankan menggunakan homebrewseperti yang disebutkan di bawah ini, dan kemudian hanya belajar menggunakan utilitas dengan a g( gsed,, greadlinkdll) alih-alih mengganti utilitas sistem.
Saya tidak setuju dengan @cwd, menggunakan --with-default-nameshanya memengaruhi pengguna lokal. Ini bisa menjadi masalah dengan utilitas terminal berorientasi mac, tetapi jika Anda menggunakan homebrew untuk semuanya, Anda mungkin juga berpura-pura menggunakan linux. Dicampur dengan iterm2, ini bekerja dengan baik untuk saya, pada dasarnya saya bisa berpura-pura pulang dengan kotak linux saya.
Ray Foss
Jawaban:
210
Ini menambahkan symlink untuk utilitas GNU dengan awalan g ke /usr/local/bin/:
Lihat brew search gnupaket lain. Jika Anda ingin menggunakan perintah tanpa awalan ag tambahkan misalnya /usr/local/opt/coreutils/libexec/gnubinsebelum direktori lain di Anda PATH.
$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutilsDepends 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==>CaveatsAll 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"
FWIW, saya memiliki Formula Homebrew yang bertindak sebagai meta-paket untuk semua utiliti GNU yang hebat: lihat shiny-and-gnu.rbdi github.com/al-the-x/homebrew-mine
AL the X
1
PATH pertama berfungsi, tetapi MANPATH gagal, mengapa? Apakah karena saya menggunakan OSX10.10? Saya menggemakan $ MANPATH, dan saya mengerti /usr/local/opt/coreutils/libexec/gnuman:, sepertinya MANPATH asli tidak termasuk. Setelah mengomentari conf MANPATH di bashrc saya, saya tidak mendapatkan apa-apa ecoh $MANPATH. Dan tentu saja, jika saya gunakan man pwd, saya mendapat manual BSD. Bagaimana cara memperbaikinya?
Zen
2
Sebab findutils, Anda perlu menambahkan PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"yang tidak disebutkan dalam output konsol instalasi.
Sridhar Sarnobat
1
Selain itu, untuk mendapatkan halaman manual yang tepat findutils, tambahkan ini ke Anda$MANPATH/usr/local/opt/findutils/share/man
Christian Long
1
@Zen: cara yang tepat untuk memulai MANPATHsehingga tetap nilai default sistem: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". Kuncinya ada di konstruk ${var-default_value}.
dan
50
Selain itu brew install coreutils, Anda juga mungkin perlu menginstal beberapa paket lainnya, seperti gnu-sed, grep:
Perhatikan bahwa --with-default-namesopsi ini dihapus sejak Januari 2019, sehingga setiap biner harus ditambahkan ke path jika ingin digunakan tanpa gawalan.
Perhatikan bahwa brew install gawk(tidak seperti yang lainnya) akan mengganti awk(melalui tautan simbolik /usr/local/bin/awk). Jika Anda ingin menyimpan yang asli /usr/bin/awk, cukuprm /usr/local/bin/awk
wisbucky
17
Saya tidak yakin bahwa saya akan merekomendasikan untuk menggantinya ; namun, Anda dapat menginstalnya ke jalur yang berbeda dan menggunakannya dengan cara itu. Secara keseluruhan, jika Anda berasal dari Linux dan ingin mengakses lebih banyak utilitas "generik" * nix, dan sistem yang mirip dengan apt, maka saya akan merekomendasikan melihat ke dalam Macports:
http://www.macports.org
Ini memungkinkan, misalnya, menggunakan GCC "generik" terbaru, sebagai lawan dari / selain GCC yang disertakan oleh Apple, seperti contohnya.
Misalnya, tar dan zip dari Mac OS X tahu tentang metadata yang tidak dimiliki versi GNU.
lhf
1
Ada aplikasi yang disediakan Apple, yang hanya GUI untuk beberapa alat baris perintah dan jika Anda menggantinya aplikasi mungkin mulai berperilaku aneh, jadi lanjutkan dengan menambahkan, bukan mengganti.
Ɱark Ƭ
Baik; sesuatu seperti Macports menambahkannya, itu tidak menggantikannya.
Jonathan
Jika Anda ingin menggunakan utilitas GNU secara default dengan MacPorts Anda dapat menambahkan /opt/local/libexec/gnubinke depan PATHvariabel lingkungan Anda .
markshep
8
Saya sudah menulis skrip untuk melakukan ini! Script dapat dilihat di sini (atau di bawah). Namun, saya tidak dapat selalu menjamin posting ini akan mencerminkan versi terbaru dari skrip yang ditautkan sebelumnya.
Setelah menjalankan skrip, Homebrew akan diinstal (jika belum), semua utilitas GNU yang terkait akan diinstal (jika belum), dan PATHvariabel akan dibangun dari utilitas yang diinstal.
#!/bin/bash# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\"https://raw.githubusercontent.com/Homebrew/install/master/install)"# 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>~/.bash_path# Build PATH variable script in ~/.bash_pathfor i in/usr/local/Cellar/*/*/bin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/libexec/gnubin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/share/man;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/libexec/gnuman;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_pathdone# 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_profilefi
Apakah Anda tidak suka downvotes tanpa komentar kritis? Terima kasih untuk skripnya.
Justin Force
@JustinForce Tidak masalah! Terima kasih atas masukannya.
Clay Freeman
2
-1. Skrip ini melakukan terlalu banyak keajaiban. Semua .bash_path-mangling tidak benar-benar diperlukan jika Anda mengikuti jawaban @ user495470 dan @ xuhdev. Dan mengubah PS1 benar-benar di luar cakupan pertanyaan ini.
Greg Dubicki
1
@GregDubicki sayangnya, bash path "mangling" diperlukan untuk beberapa paket ini. Anda bisa memeriksanya sendiri. Sehubungan dengan mengubah PS1: skrip ini adalah untuk penggunaan pribadi. Siapa pun yang ingin mengembalikannya dapat melakukannya dengan sangat mudah.
Clay Freeman
5
Saya telah menulis sebuah skrip yang secara transparan mengubah macOS CLI menjadi pengalaman baru GNU / Linux CLI
menginstal program GNU yang hilang
memperbarui program GNU yang ketinggalan zaman
mengganti program BSD yang sudah diinstal sebelumnya dengan implementasi GNU pilihan mereka
menginstal program lain yang umum di antara distribusi GNU / Linux populer
Mencoba menjalankan perintah pertama ( git clone [email protected].:fabiomaia/linuxify.git) Pertama-tama dikatakan "Keaslian host 'github.com' tidak dapat dibuat dll.". Saya mengetik yesdan menekan Enter. Lalu dikatakan [email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.Apa yang salah?
izogfif
@izogfif Coba kloning dengan HTTPS sebagai gantinyagit clone https://github.com/fabiomaia/linuxify.git
fabiomaia
1
Ya, itu berhasil. Tolong, perbarui jawaban Anda (juga, hilangkan dolar itu di awal - mereka disalin ketika memilih teks dan salin-tempel ke konsol).
homebrew
seperti yang disebutkan di bawah ini, dan kemudian hanya belajar menggunakan utilitas dengan ag
(gsed
,,greadlink
dll) alih-alih mengganti utilitas sistem.--with-default-names
hanya memengaruhi pengguna lokal. Ini bisa menjadi masalah dengan utilitas terminal berorientasi mac, tetapi jika Anda menggunakan homebrew untuk semuanya, Anda mungkin juga berpura-pura menggunakan linux. Dicampur dengan iterm2, ini bekerja dengan baik untuk saya, pada dasarnya saya bisa berpura-pura pulang dengan kotak linux saya.Jawaban:
Ini menambahkan symlink untuk utilitas GNU dengan awalan g ke
/usr/local/bin/
:Lihat
brew search gnu
paket lain. Jika Anda ingin menggunakan perintah tanpa awalan ag tambahkan misalnya/usr/local/opt/coreutils/libexec/gnubin
sebelum direktori lain di AndaPATH
.sumber
shiny-and-gnu.rb
di github.com/al-the-x/homebrew-mine/usr/local/opt/coreutils/libexec/gnuman:
, sepertinya MANPATH asli tidak termasuk. Setelah mengomentari conf MANPATH di bashrc saya, saya tidak mendapatkan apa-apaecoh $MANPATH
. Dan tentu saja, jika saya gunakanman pwd
, saya mendapat manual BSD. Bagaimana cara memperbaikinya?findutils
, Anda perlu menambahkanPATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
yang tidak disebutkan dalam output konsol instalasi.findutils
, tambahkan ini ke Anda$MANPATH
/usr/local/opt/findutils/share/man
MANPATH
sehingga tetap nilai default sistem:MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. Kuncinya ada di konstruk${var-default_value}
.Selain itu
brew install coreutils
, Anda juga mungkin perlu menginstal beberapa paket lainnya, sepertignu-sed
,grep
:Perhatikan bahwa
--with-default-names
opsi ini dihapus sejak Januari 2019, sehingga setiap biner harus ditambahkan ke path jika ingin digunakan tanpag
awalan.Referensi lama (kapan
--with-default-names
tersedia): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/sumber
brew install gawk
(tidak seperti yang lainnya) akan menggantiawk
(melalui tautan simbolik/usr/local/bin/awk
). Jika Anda ingin menyimpan yang asli/usr/bin/awk
, cukuprm /usr/local/bin/awk
Saya tidak yakin bahwa saya akan merekomendasikan untuk menggantinya ; namun, Anda dapat menginstalnya ke jalur yang berbeda dan menggunakannya dengan cara itu. Secara keseluruhan, jika Anda berasal dari Linux dan ingin mengakses lebih banyak utilitas "generik" * nix, dan sistem yang mirip dengan apt, maka saya akan merekomendasikan melihat ke dalam Macports: http://www.macports.org
Ini memungkinkan, misalnya, menggunakan GCC "generik" terbaru, sebagai lawan dari / selain GCC yang disertakan oleh Apple, seperti contohnya.
sumber
/opt/local/libexec/gnubin
ke depanPATH
variabel lingkungan Anda .Saya sudah menulis skrip untuk melakukan ini! Script dapat dilihat di sini (atau di bawah). Namun, saya tidak dapat selalu menjamin posting ini akan mencerminkan versi terbaru dari skrip yang ditautkan sebelumnya.
Setelah menjalankan skrip, Homebrew akan diinstal (jika belum), semua utilitas GNU yang terkait akan diinstal (jika belum), dan
PATH
variabel akan dibangun dari utilitas yang diinstal.sumber
.bash_path
-mangling tidak benar-benar diperlukan jika Anda mengikuti jawaban @ user495470 dan @ xuhdev. Dan mengubah PS1 benar-benar di luar cakupan pertanyaan ini.Saya telah menulis sebuah skrip yang secara transparan mengubah macOS CLI menjadi pengalaman baru GNU / Linux CLI
https://github.com/fabiomaia/linuxify
Ini juga memungkinkan Anda untuk dengan mudah membatalkan semuanya.
sumber
git clone [email protected].:fabiomaia/linuxify.git
) Pertama-tama dikatakan "Keaslian host 'github.com' tidak dapat dibuat dll.". Saya mengetikyes
dan menekan Enter. Lalu dikatakan[email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Apa yang salah?git clone https://github.com/fabiomaia/linuxify.git