Perintah yang tersedia secara default di Terminal di OS X, sepertinya tidak berperilaku seperti versi linux mereka. Bagaimana saya bisa mengganti semuanya dengan perintah linux GNU yang sebenarnya?
Sebagai contoh, saya membutuhkan argumen tambahan yang "" mengganggu. Juga, ini hanya bekerja dengan file teks. Ini tidak berguna.
linux
macos
command-line
terminal.app
linux-terminal
Yang satu
sumber
sumber
-i
bendera tidak standar .ed
adalah untuk mengedit file.Jawaban:
Dalam kasus umum, Anda tidak dapat (atau tidak seharusnya ) mengganti perintah default sama sekali. Alasannya adalah bahwa banyak skrip administrasi sistem dan paket pihak ketiga mungkin mengandalkan perintah ini untuk berperilaku seperti yang mereka lakukan di luar kotak pada OS X.
Jadi, jika Anda hanya menghapus perintah sistem dan menggantinya dengan setara GNU yang memiliki perilaku yang tidak kompatibel atau argumen baris perintah, itu mungkin akan merusak sesuatu. Terutama jika Anda menggunakan beberapa perangkat lunak yang "porting" ke Mac OS X setelah awalnya dirancang untuk berjalan di Linux atau BSD, karena jenis program ini lebih cenderung bergantung pada skrip shell dan perintah sistem daripada memanggil OS X API.
Yang dapat Anda lakukan adalah menginstal lingkungan yang menginstal utilitas GNU di direktori lain tanpa menimpa default, dan kemudian menyesuaikan
PATH
variabel lingkungan Anda sehingga memberikan prioritas pada perintah yang ditemukan dalam direktori GNU sebelum bahkan mencari direktori sistem. Anda bisa memasang ini sehingga hanya mengatur PATH Anda seperti itu jika Anda memulai shell interaktif; Anda dapat google cara melakukan ini denganbash
atau mengajukan pertanyaan lain pada SU (atau mencarinya, karena mungkin pernah ditanyakan sebelumnya) jika Anda ingin melakukannya.Contoh dari lingkungan semacam itu adalah Homebrew yang misalnya memiliki GNU
sed
. Setelah menginstal Homebrew, Anda dapat mengetikdan instal GNU Coreutils . Ini akan memberikan Anda dengan
sed
,date
,printf
,wc
dan banyak alat lainnya yang kapal dengan GNU / Linux, tapi tidak OS X. Namun, agar tidak "override" default OS X binari, mereka akan diawali dengang
secara default. Jadi, setelah menginstal Coreutils, jika Anda ingin menggunakan GNU, ketikkanJika ini terlalu merepotkan untuk diketik setiap saat, Anda dapat menambahkan direktori "gnubin" ke PATH Anda dan cukup panggil GNU dengan
sed
. Anda harus menambahkan yang berikut ini ke~/.bash_profile
:Tentu saja, jika Anda memerlukan lingkungan Linux dari sup ke kacang (kernel, X11, kompatibilitas syscall, dll) Anda harus menjalankan Linux di mesin virtual, seperti VirtualBox . Ini adalah taruhan yang aman jika Anda perlu menjalankan perangkat lunak atau skrip yang dirancang untuk berjalan di Linux.
Homebrew hanya akan memberi Anda kompatibilitas untuk kelas program tertentu yang tidak memerlukan perilaku spesifik Linux. Misalnya
inotify
hanya tersedia di Linux.drm
(Direct Rendering Manager) hanya tersedia di Linux. Ada beberapa panggilan sistem tingkat rendah yang hanya tersedia di Linux, dan yang tidak ada padanannya pada OS X, jadi memindahkan program-program tertentu dari Linux ke OS X dapat menjadi tidak praktis atau tidak mungkin tanpa perubahan kode yang signifikan.sumber
brew install coreutils
tidak termasuksed
. Namun Anda dapat melakukanbrew install gnu-sed
ini menginstalgsed
dan tidaksed
, bahkan jika Anda memperbarui$PATH
. Saya membuat symlink untuk menyembunyikan Macsed
:ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
namun Anda masih harus melakukanman gsed
untuk melihat halaman manual yang tepat.brew install gnu-sed --default-names
akan menginstalnya sebagaised
--default-names
, Anda dapat menginstal dengan perintah g-prefixed dan kemudian menginstal oh-my-zsh (sangat disarankan) dan mengaktifkan plugin gnu-utils.Anda dapat menggunakan Gentoo Prefix yang mendukung OS X, Anda dapat melakukannya dengan bootstrap dan kemudian menambahkan path yang relevan di direktori awalan ke PATH Anda. Mungkin ini sudah melakukan itu untuk Anda. Setelah selesai, Anda dapat menggunakan perintah standar Gentoo untuk menginstal paket.
emerge coreutils
akan memberi Anda utilitas GNU standar, misalnya.Harap dicatat bahwa Gentoo mengkompilasi secara default, Anda mungkin ingin mengatur host biner . Ini hanya menggunakan salah satu URL pada bagian kedua artikel itu, dan menempatkannya
PORTAGE_BINHOST="... your url here ..."
di./etc/make.conf
dalam awalan Anda.sumber
Sebagai tindak lanjut dari posting @ allquixotic, berikut adalah instruksi resmi per
brew install coreutils
sumber
Sehubungan dengan
sed
Anda dapat mengunduh biner yang telah dikompilasi dariRudix
proyek. UntukRudix
paket lebih lanjut lihat di sini dan di sini .sumber