Bash in Linux vs Mac OS


27

Sto acquistando un iMac. Ho lavorato su Linux per molto tempo e faccio un sacco di script bash. Mi chiedevo se tutti i comandi e le funzionalità bash sono disponibili su Mac OS? Qualcuno ha qualche esperienza con gli script di Mac Bash? Apprezzo il tuo contributo.

Risposte:


32

Bash stesso sarà per lo più lo stesso. Ci saranno alcune piccole differenze, ma nessuna di queste influenzerà la portabilità dei tuoi script.

Il problema principale è che i coreutils di MacOS sono basati su FreeBSD mentre le utility a cui sei abituato sono molto probabilmente dal progetto GNU. I coreutils di FreeBSD non sono sempre compatibili con i coreutils di GNU. Esistono differenze comportamentali e comportamentali tra le versioni GNU e FreeBSD di sed , grep , ps e altre utility .

È possibile installare i coreutils GNU ma hanno g-prefissi (ad es. gcatPer cat). Non è una buona idea sostituire i coreutils di MacOS con i coreutils GNU.


6
Dovrebbe essere amplificato che l'uso delle utility standard basate su FreeBSD può influenzare la portabilità dei tuoi script (ad esempio, psha flag diversi, come fa grep). Ho sbattuto la testa contro il muro un paio di volte cercando di capire perché il mio script Ubuntu non stava producendo lo stesso output sul mio Mac.
Chris Gregg,

1
Se vuoi scrivere i tuoi script in modo che siano portatili, www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp è un ottimo posto per ottenere le specifiche rigorosamente standard per le utility e i comandi POSIX e XCU.
Kojiro,

@ChrisGregg: sono d'accordo. Ho aggiunto un po 'alla mia risposta per sottolineare che ci sono incompatibilità tra i due set di strumenti.

5

Se è importante, bashsu Mac OS X Mountain Lion è ancora la versione 3.2. La maggior parte delle distribuzioni di Linux in questi giorni viene distribuita con 4.x quindi ti mancheranno le funzionalità della versione 4. Attualmente, la versione 4.2.45 è disponibile da Homebrew come soluzione alternativa. Non so quale sia la versione di Mavericks, non sono sicuro che qualcuno che lo sappia sia ancora autorizzato a dirlo.

Come menzionato da altri, bashè lo stesso bash(a parte le versioni già note) ma Mac OS X utilizza una (principalmente) area utente BSD. Molte delle utility di sistema standard hanno opzioni leggermente diverse o si comportano in modo leggermente diverso. Sfortunatamente sono troppo numerosi per essere elencati qui.


2
4 anni dopo bash su High Sierra sta ancora usando: GNU bash, versione 3.2.57 (1) -release (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
Nate Lockwood

4

Installa homebrew (un gestore di pacchetti), quindi installa le versioni gnu di alcune utility di base:

$ brew install coreutils
$ brew install gnu-sed

Dopo ogni installazione, mostrerà i passaggi che è possibile seguire in modo da poter semplicemente chiamare dateanziché gdatead esempio, in modo da poter utilizzare gli script bash di Linux senza alcuna modifica.

Congratulazioni, hai appena risolto il 99% dei tuoi problemi di scripting multipiattaforma.


3
D'altra parte, se gli script in realtà sono pensati per essere portatili, ti consigliamo di correggere gli script, non i sintomi.
tripla il

2

Una cosa che può essere frustrante venire da Linux a un Mac è che non esiste un /procpseudo-file system. Questo ha interrotto un certo numero dei miei script Linux e può essere complicato trovare modi adatti per ottenere le stesse informazioni che trovi nello procscript bash del tuo Mac.


0

Sono un utente 'principalmente Linux, Mac occasionale' e trovo che:

bash, ~/.bashrce per ~/.bash_aliaseslo più funzionano allo stesso modo.

Un problema che ho riscontrato è stato uno dei comandi per modificare il prompt dei colori non funzionava sul Mac. Da quella e altre esperienze ho imparato a tenere aperta una finestra di terminale e ad aver effettuato l'accesso durante l'impostazione del mio .bashrcfile. Quello è stato che posso testare 'nuova finestra' e trovare eventuali errori nel ancora registrato in uno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.