2012-02-08 16 views
42

Sto cercando un modo molto semplice per ottenere la versione di TCL installata su una macchina dalla riga di comando. Per la maggior parte dei linguaggi di programmazione, qualcosa sulla falsariga diOttieni la versione di TCL dalla riga di comando?

languagename -v 

fornisce le informazioni che voglio. Questa non sembra essere un'opzione per tclsh.

Il TCL FAQ Q.B21 suggerisce

echo 'puts $tcl_version;exit 0' | tclsh 

ma mi chiedo se c'è qualcosa di più straight-forward e cross-platform? (Ho il sospetto che questo fallirebbe potentemente su un sistema operativo Microsoft.)

-

EDIT: Giusto per sottolineare che sto cercando qualcosa che può essere eseguito direttamente dalla riga di comando del sistema operativo . Sono disponibili tutti i tipi di informazioni una volta avviato tclsh, ma sto cercando di evitarlo per facilitare la scoperta automatizzata.

+5

Se stai anche cercando il numero di versione minore, usare 'mette [info] livello di patch' invece di 'mette $ tcl_version'. Inoltre, non è necessario 'exit' - Tcl vedrà la fine dello script e uscirà da sola. –

+0

Grazie Glenn. È utile saperlo. –

+1

Sarebbe interessante sapere PERCHÉ avete bisogno delle informazioni. A volte in Tcl non hai bisogno di informazioni, perché STUBS potrebbe rendere accettabile qualsiasi recente (<12 anni) vecchio Tcl. – schlenk

risposta

36

Questo potrebbe sembrare troppo semplicistico, ma se hai fatto un file di script che conteneva i comandi:

puts $tcl_version 

E poi corse tclsh sillyscript.tcl, che avrebbe eseguito su tutte le piattaforme, assumendo binario è in PATH . Certamente non è elegante o appariscente, o addirittura pulito, ma soddisfa tale requisito AFAIK.

====

mi sono incuriosito, così ho provato e senza le virgolette:

echo puts $tcl_version;exit 0 | tclsh 

Esegue bene sulla mia scatola di finestre ... forse rilevamento piattaforma prima della rilevazione TCL è un'opzione?

+0

Questo potrebbe essere il modo migliore per farlo. Aspetterò per vedere se arrivano altre risposte, altrimenti accetterò questo. Grazie. –

+1

Diverse piattaforme hanno metacaratteri di shell diversi, ma l'uso di un file di script di supporto è il più semplice di tutti. –

+1

Linuxers, copia e incolla: echo 'mette $ tcl_version; exit 0' | tclsh –

18

puoi farlo anche tu.

bash-3.2$ tclsh 
% puts $tcl_version 
8.6 
% info patchlevel 
8.6.0 

ma il modo migliore che penso è attraverso l'eco.

echo 'puts [info patchlevel];exit 0' | tclsh 
echo 'puts $tcl_version;exit 0' | tclsh 

=======

strano quando ho provato con le citazioni non ha funzionato per me. con Mac osx

+1

Se non si inserisce $ tcl_version in virgolette singole, la shell bash tenterà di sostituire $ tcl_version con il valore di una variabile di shell bash denominata tcl_version. Poiché tcl_version non esiste, la sostituzione è una stringa nulla, trasformando "puts $ tcl_version" in "puts". Le virgolette singole nella shell bash sono come {} in tcl - interrompe l'interpolazione. – Scooter

+0

Suggerimento molto prezioso per aver aggiunto l'invocazione 'info patchlevel'. Questo fa la differenza, ad esempio, quando si installa 'gcc' poiché tcl è" necessario per eseguire la suite di test GCC, vedere la sezione sulla verifica dei dettagli Tcl 8.6 ha una regressione nota nella gestione dei pattern RE che fa fallire alcune parti della suite. [ ...] Questo bug è stato corretto in 8.6.1 "La versione 8.6 viene fornita con Ubuntu 14.04 ma il numero di versione minore era difficile da ottenere. – XavierStuvw

+0

Correzione su quanto sopra. La terminologia per la notazione della versione è _major.minor.patchlevel_. Quindi 'info patchlevel' dà la versione al livello di patch. Non è corretto da parte mia dire che il numero di versione minore era difficile da ottenere. Il livello di patch era. – XavierStuvw

3

seconda della shell, potrebbe essere:

tclsh <<< 'puts [info patchlevel]' 
+0

Il 'info patchlevel' è nella mia vista superiore a' tcl_version' perché fornisce un tag di versione più completo. – XavierStuvw

Problemi correlati