2013-06-15 11:48:25 +0000 2013-06-15 11:48:25 +0000
55
55

Come posso usare una shell simile a Bash su Windows?

Uso Linux e un Mac, e presto insegnerò alcune cose sulla linea di comando.

Cosa posso installare su Windows per darmi una finestra di terminale più simile a una shell Bash di base per Mac/Linux?

Mi piacerebbe essere in grado di definire anche .bash\aliases se possibile.

Risposte (8)

48
48
48
2016-03-30 19:45:06 +0000

Ora puoi installare il Windows Subsystem for Linux che ti permette di eseguire la shell Linux nativa in modalità utente e gli strumenti su Windows. Questo permette di eseguire la shell Bash direttamente su Windows ed è basato su Ubuntu.

Questo è stato introdotto in Windows 10 con l'Anniversary Update (2016) e non è abilitato di default. Per abilitare la nuova funzione su una macchina Windows 10 Anniversary Update, fate come segue:

  1. Navigare in Impostazioni -> Aggiornamento e sicurezza -> Per gli sviluppatori e selezionare “Modalità sviluppatore”
  2. Pannello di controllo -> Programmi e funzionalità e clicca su “Attiva o disattiva le funzionalità di Windows” nel pannello in alto a sinistra
  3. Nella finestra di dialogo, spunta “Windows Subsystem for Linux” e clicca su Ok
  4. Riavvia la macchina
  5. Cercate “bash” e cliccateci sopra, dovrebbe aprire un prompt dei comandi e chiedervi se volete installare “Ubuntu on Windows”, continuate con “y”
  6. Dopo l'installazione vi chiederà di creare un nome utente e una password UNIX
  7. Siete ora pronti a utilizzare la shell bash

Un po’ di storia, nel 2015 il progetto Astoria è stato avviato per portare le applicazioni Android su Windows e hanno costruito un sottosistema Linux chiamato Windows Subsystem for Linux (WSL) per lo scopo. Alla fine il progetto Astoria è stato abbandonato in quanto ha minato la loro strategia UWP (Universal Windows Platform), ma alcune parti sono state mantenute e costituiscono la base di bash per Windows. Nel corso del tempo, Microsoft ha collaborato con Canonical (creatori di Ubuntu Linux) per fornire loro un'immagine nativa con tutti gli strumenti/binari supportati.

Maggiori informazioni disponibili qui, https://blogs.msdn.microsoft.com/commandline/2016/04/06/bash-on-ubuntu-on-windows-download-now-3/ https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/ https://sec.ch9.ms/sessions/build/2016/P488.mp4 (video)

42
42
42
2013-06-15 11:50:58 +0000

Potresti installare Cygwin o MSYS/MinGW , o potresti installare una distribuzione Linux completa in una macchina virtuale (per esempio, usando VirtualBox ).

21
21
21
2017-05-09 14:27:32 +0000

Ecco una lista delle opzioni disponibili a partire dal 2018-05 con un sacco di aggiornamenti riguardanti la WSL a partire dal 2020-01 insieme ad un po’ di dettagli su ciascuna di esse.

Opzioni che spiccano

* Windows Subsystem for Linux(WSL) **

WSL sta diventando sempre più maturo (Microsoft ha abbandonato l'avvertimento beta molto tempo fa) ed è molto facile da installare quindi in molti casi è un'ottima opzione (se non la migliore). Risolve il problema usando un metodo diverso dalla maggior parte delle altre opzioni. Si esegue esattamente lo stesso codice binario che si eseguirebbe su un sistema Linux. Fino al 2020-01 WSL intercetta le chiamate al kernel e le traduce in chiamate al kernel di Windows (pensate al contrario di Wine). Questo cambierà poiché l'attuale beta di WSL esegue un vero kernel linux in una VM leggera.

Comunque, con WSL si ottiene una bella shell con quasi tutte le chicche CLI che ci si aspetta di trovare su un'installazione stock di Ubuntu e l'opzione di apt install quasi tutto ciò che è disponibile dai repository. Microsoft dichiara ufficialmente che “WSL non mira a supportare desktop o applicazioni GUI” tuttavia ci sono istruzioni non ufficiali su come farlo. Sembra che allo stato attuale delle cose (2020-01) i principali svantaggi di WSL siano i seguenti:

Ecco un vecchio ma simpatico confronto con cygwin (nota che Rich Turner è un membro del team WSL e ha postato molte informazioni utili riguardo a WSL)

Cygwin e Babun

Cygwin fornisce quanto segue:

  1. una shell bash e il terminale Mintty,
  2. una vasta gamma di comuni utility Linux compilate per funzionare su Windows
  3. un completo strato di compatibilità che permette ai programmi Linux di funzionare su Windows.

Cygwin mira a rendere facile il porting delle applicazioni Linux su Windows. Se qualche programma C è stato progettato per Unix e si aspetta di usare caratteristiche come pipe, accesso a file e directory in stile Unix e così via, allora è possibile compilarlo per Cygwin e Cygwin agirà come uno strato di compatibilità tra il codice e il sistema operativo estero (Windows). Questo permette allo stesso programma C di funzionare sia su Linux che su Windows con poca o nessuna modifica. Un'enorme lista di programmi Linux è stata così compilata e può essere eseguita quando si installa Cygwin. Tuttavia tu, l'utente di questi programmi, dovrai probabilmente avere familiarità con Unix. Per esempio potresti aver bisogno di passare argomenti come /cygdrive/c/autoexec.bat invece di c:\autoexec.bat ed essere pronto a trattare l'output con la terminazione di linea di Unix (\n) invece della terminazione di linea di Windows (\r\n).

La collezione di tutti i programmi Cygwin comprende un repository e sebbene Cygwin non abbia un gestore di pacchetti Linux tradizionale si possono aggiungere, rimuovere e aggiornare programmi da questo repository in qualsiasi momento con un modo molto contro-intuitivo (si esegue il setup di Cygwin. exe in qualsiasi momento dopo che l'installazione è stata completata)

  • Babun ** è Cygwin con un gestore di pacchetti completo (pact), oh-my-zsh per la sua shell, git, aggiornamenti automatici e un'architettura orientata ai plug-in. Anche se la shell di default è zsh si può facilmente passare a bash. Sembra un bell'aggiornamento da Cygwin vanilla, se non ti dispiace il peso extra.

Mingw-w64

Mingw-w64 fornisce quanto segue:

  1. una shell bash,
  2. una discreta quantità di utility Linux,
  3. una toolchain di sviluppo SW per costruire applicazioni che funzioneranno senza uno strato di compatibilità Linux (o con uno minimo).

MinGW è principalmente una distribuzione software e una piattaforma di costruzione per Windows. In particolare è una porta per Windows degli strumenti di compilazione GNU, come GCC, make, bash e così via. Include una discreta quantità di strumenti GNU e un livello minimo di compatibilità con Unix.

La differenza principale tra Mingw-w64 e Cygwin è sulle priorità: Cygwin mira a fornire un completo strato di compatibilità POSIX che comprende una completa implementazione di tutte le principali chiamate di sistema e librerie Unix; le prestazioni sono secondarie alla compatibilità. MinGW mira alle prestazioni, quindi non fornirà alcune API POSIX che non possono essere implementate facilmente e/o abbastanza velocemente sotto Windows. Inoltre l'obiettivo principale di MinGW sono gli sviluppatori S/W. Tuttavia gli utenti occasionali possono anche godersi la sua shell e le utilità di uso generale incluse.

MSYS2 e Git per Windows

MSYS2 fornisce quanto segue:

  1. una shell bash e il terminale Mintty,
  2. una discreta quantità di utility Linux,
  3. un gestore di pacchetti a riga di comando completo per installare programmi OS
  4. parti sia di Cygwin che di MinGW per supportare la costruzione di applicazioni con o senza un livello di compatibilità Linux completo.
  5. un repository di software e un gestore di pacchetti (pacman) che rende facile installare, usare, costruire e portare il software su Windows.

MSYS2 è anche principalmente una distribuzione di software e una piattaforma di costruzione per Windows come MinGW, ma combina sia il modo di Cygwin che quello di MinGW. Potete usare MSYS2 per creare “programmi MinGW” o “programmi MSYS2”. Quest'ultimo si collega al livello di compatibilità di MSYS2 (msys-2.dll) che segue da vicino lo sviluppo del livello di compatibilità di Cygwin con alcune aggiunte/modifiche . I repository dei 2 progetti sono comunque completamente indipendenti. Quindi, sebbene sia MSYS2 che Cygwin forniscano grep.exe, potrebbero avere una versione completamente diversa.

  • Git per Windows ** è solo MSYS2 con git installato o almeno pesantemente basato su MSYS2 . Fornisce la stessa shell (bash), terminale (Mintty) e gestore di pacchetti (pacman). Sembra essere il modo più popolare per far funzionare il dominante Git su Windows e insieme ad esso si ottiene un bell'ambiente Unix.

Terreno comune

Tranne WSL la maggior parte degli strumenti di cui sopra condivide molta tecnologia comune (librerie, eseguibili, concetti). Per esempio la shell bash che viene fornita con MinGW dipende da msys-2.dll che a sua volta è un fork di cygwin.dll. Quindi sì, c'è molto spazio per la confusione :-)

Altre opzioni

  • Cmder ** fornisce solo un bel terminale e una shell bash-like per Windows. Il suo componente principale è * Conemu ** (il terminale). In cima a questo aggiunge Clink che fornisce Powerful Bash-style command line editing, un layout di prompt personalizzato e lo schema di colori Monokai. È altamente (o forse completamente) compatibile con i programmi di console nativi di Windows.

  • Scoop ** fornisce un gestore di pacchetti a riga di comando per molti noti programmi multipiattaforma, inclusi molti strumenti GNU. Scarica pacchetti precompilati. Non fornisce né una shell né un terminale_ ma invece gira sotto cmd.exe di Windows (con tutte le sue limitazioni ma anche con la sua piena compatibilità con i programmi nativi della console di Windows). Inoltre non include alcuna suite di compilatori (ma naturalmente compilatori e strumenti di sviluppo sono pacchetti tipici che si possono installare con Scoop). Molti dei programmi che Scoop installa provengono direttamente dal progetto MinGW/MSYS, o sono stati costruiti usando i loro strumenti.

Ancora più opzioni

Le soluzioni qui sotto non sembrano attive e non le ho mai testate ma sembrano fare il lavoro per altri:

  • Gow ** (Gnu On Windows) è l'alternativa leggera a Cygwin senza una shell. Utilizza un comodo installer per Windows che installa circa 130 utilissime applicazioni open source Linux compilate come binari nativi win32 e disponibili attraverso cmd.exe di Windows. È progettato per essere il più piccolo possibile (circa 10 MB).

  • UnxUtils & GnuWin32 **: UnxUtils è una collezione di port di comuni utility GNU Unix-like su Win32 nativo, con eseguibili che dipendono solo dal Microsoft C-runtime msvcrt.dll. È necessario scaricare la parte principale e alcuni aggiornamenti . GnuWin32 ha versioni successive a UnxUtils, ma richiede file di supporto (per esempio DLL)

MSYS & MinGW sembrano essere stati obsoleti da MSYS2 & MinGW-W64, quindi non li ho mai guardati.

Alcuni problemi comuni su Cygwin & MSYS2

Per quanto riguarda il terminale

Mintty è il terminale usato in Cygwin, MSYS2 e i loro derivati. Si dovrebbe essere consapevoli che se si stanno eseguendo programmi di console nativi di Windows non è un sostituto indolore per il Prompt dei comandi di Windows. Mentre i programmi con semplice output di testo di solito funzionano bene, quelli interattivi e a schermo intero spesso hanno problemi. Leggi more on Mintty’s home page e leggi anche la voce “Some native console programs don’t work when run from Git Bash” su Git for Windows FAQ . Quella voce ha queste raccomandazioni da fare quando si affrontano questo tipo di problemi:

Ci sono diversi metodi per aggirare questi problemi:

  • Eseguire i programmi che hanno problemi usando l'utilità winpty . Questo ti permette di continuare a usare il terminale mintty più carino, ma può diventare ingombrante se hai bisogno del workaround per molti programmi.
  • [usa cmd.exe] e configuralo per “Quick Edit”, dimensioni ragionevoli e scroll-back e font unicode adatto. Dovrai comunque vivere con le altre stranezze di [cmd.exe].
  • Installa e usa Conemu .

Altri problemi

Le due cose più importanti da tenere a mente sono queste:

  1. c'è un compromesso tra potenza e problemi difficili da debuggare. Più potente è la soluzione, più cose possono andare male, anche in modi che inizialmente sembreranno estranei al vostro Linux-layer.

  2. se non avete molta esperienza con Linux non usate le soluzioni più potenti come Cygwin/MSYS2/MinGW

UnxUtils e GnuWin32 hanno la minor potenza ma anche il minor potenziale di causarvi mal di testa. Cygwin e simili saranno in cima alla lista sia per potenza che per mal di testa. Cmder è da qualche parte nel mezzo. Quindi quando avete bisogno delle soluzioni più potenti fate un buon sonno e siate pienamente concentrati. Evitate di usare soluzioni potenti mentre testate qualcosa di nuovo e possibilmente instabile. Inoltre non dimenticate che soluzioni di media complessità come cmder non sono senza macchia.

Il problema dei comandi Linux che fanno ombra a quelli di Windows è una causa comune di problemi difficili da debuggare in soluzioni come Cygwin/MSYS2/MinGW. Ecco un esempio: Avevo un file .bat che usava il comando timeout. Quando veniva eseguito sotto Cygwin falliva perché timeout è anche un comando Linux ma con una sintassi diversa. Dopo aver individuato il problema ho scoperto che potevo aggiungere un PATH=… all'inizio del file .bat per assicurarmi che il comando Windows avesse la priorità. Ma poi ho ottenuto un ancor più criptico “Input redirection is not supported” errore e mi sono accontentato di un workaround prima di trovare la ragione.

Ecco un esempio di un problema con cmder. Stavo eseguendo la versione Windows di unison sotto Cmder e in alcune condizioni particolari si bloccava con assolutamente nessun messaggio di errore. Lo stesso comando girava sempre perfettamente sotto cmd.exe. La cosa divertente è che funzionava perfettamente anche sotto Cygwin (infatti se avete nomi di file in Unicode un terminale Cygwin è meglio di cmd.exe perché cmd.exe spesso visualizza testo Unicode malformato).

A proposito di questa guida

Nel corso del 2017-05 mi sono stufato di non capire le differenze degli strumenti di cui sopra anche se ne usavo alcuni da tempo (principalmente CygWin e cmder ma mai per scopi di sviluppo). Così ho speso qualche ora per capire il panorama. Questa guida è il risultato delle note che ho tenuto. Non sono un esperto del settore ma ho cercato di trovare tutte le informazioni rilevanti, leggerle con occhio critico e presentare le parti più importanti in modo chiaro. Per favore commentate se qualcosa vi sembra sbagliato e farò del mio meglio per correggerlo.

Infine una scusa per alcuni problemi terminologici: In questo testo a volte uso il termine Linux al posto di UNIX o POSIX. So che non sono la stessa cosa, ma è molto difficile differenziarli quando ci si avvicina a un argomento da così lontano. Anche quando non è difficile ci vuole del tempo che non ho ;-)

10
10
10
2013-10-30 12:46:07 +0000

Ti suggerirei di scaricare e installare un set minimo di MinGW e anche un set minimo di MSYS. Il programma di installazione di MinGW ti dà una facile interfaccia grafica per scegliere quali pacchetti vuoi installare. Se tutto quello che vuoi è BASH, allora l'installazione non prenderà più di qualche megabyte.

AGGIORNAMENTO: Sono passato a MSYS2 che è molto più avanzato, e ha il port dello strumento pacman di ArchLinux per la gestione dei pacchetti. L'installer di MSYS2 ha tutto ciò di cui avete bisogno, in più usa mintty che è assolutamente perfetto.

10
10
10
2013-11-20 01:00:47 +0000

C'è anche Clink disponibile su GitHub . Si integra nel prompt dei comandi di Windows usando le librerie hook.

Dalla descrizione del progetto:

Clink combina la shell nativa di Windows cmd.exe con le potenti caratteristiche di editing della riga di comando della libreria GNU Readline, che fornisce un ricco completamento, cronologia e capacità di editing della riga.

(quindi non fornisce caratteristiche di bash-as-a-programming-language o altre chicche Unix)

Uso Linux al lavoro e mi trovo a volte a fare tabulazioni in cmd che non si comporta come mi aspetto da Bash. Con Clink posso superare alcuni di questi difetti.

Ultimamente, ho anche scoperto un progetto promettente, ma non ancora ‘can-do-all’, chiamato flinux che emula le funzioni di sistema di Linux e fornisce una sorta di sistema sopra di esso (attualmente basato su Arch Linux)

7
7
7
2013-06-15 17:07:20 +0000

Oltre a what faffaffaff said , Git for Windows include Bash e alcuni comuni programmi a riga di comando di Linux (per esempio Vim , sed , e gawk ). È basato su MSYS . La versione dei programmi è però vecchia, per esempio Bash è la versione 3.1. Cygwin avrebbe versioni più recenti delle utility.

Uso anche ConEmu come emulatore di terminale (principalmente per l'evidenziazione della sintassi in Vim, pagine di tabulazione, e un più facile copia-incolla). console2 è anche un altro popolare emulatore di terminale anche se non l'ho provato.

2
2
2
2015-06-16 22:50:19 +0000

Questa è una delle prime cose che faccio quando configuro una nuova macchina Windows: Una console funzionale ed elegante in Windows

1
1
1
2015-06-19 15:44:31 +0000

Ho appena provato con Babun , che ha integrato internamente Cygwin, e mi sa di buono : )

Il file di download è leggermente grande, circa 250 MB. Ma l'installazione è semplice; non c'è bisogno di configurare nulla e semplicemente funziona!