Crea uno script da un URL in bash

3

Ho capito che questo dovrebbe funzionare in bash:

source <(curl -s https://example.com/script.sh)

o

bash <(curl -s https://example.com/script.sh)

o

curl -s https://example.com/script.sh | source /dev/stdin

Ma non funziona per me. Il download in un file, l'acquisizione del file e la rimozione del file funzionano. Sono curioso di sapere perché nessuno dei singoli liners funziona comunque.

    
posta rich 25.01.2013 - 23:58
fonte

2 risposte

2

Hai ragione nel dire che i tuoi due primi on-line dovrebbero funzionare secondo bash semantica di sostituzione del processo . In mio testing ( bash 3.2 su OS X 10.8 .2), il secondo fa, mentre il primo no.

Nel caso del tuo primo one-liner, sembra che potresti incontrare una delle limitazioni della sostituzione del processo. Citando la pagina di Wikipedia sulla sostituzione del processo :

Process substitution has some limitations: the “files” created are not seekable, which means the process reading or writing to the file cannot perform random access; it must read or write once from start to finish. Programs that explicitly check the type of a file before opening it may refuse to work with process substitution, because the “file” resulting from process substitution is not a regular file.

- se source è un comando che ha difficoltà con questo (almeno in bash 3.2), ciò spiegherebbe il suo fallimento nel lavorare con la sostituzione del processo.

Il secondo one-liner potrebbe apparire come fallito perché esegue il codice in una sottotitola invece di procurarselo. Se ti aspetti che imposti alias e funzioni, questo non funzionerà, poiché non vengono trasferiti alla shell genitore quando sono definiti in una subshell.

Il terzo liner non funziona perché source non elabora stdin - solo file (vedi bash pagina man ).

    
risposta data 28.01.2013 - 09:26
fonte
1

Non so cosa ti piace fare ma se ti piace scaricare uno script (o qualsiasi altra cosa) usarlo.

curl -s -L https://example.com/script.sh -o script.sh

per maggiori dettagli vedi

man curl 

nel terminale. -s silenzioso, -L posizione dell'obiettivo incluso reindirizzamento a un nuovo target, -un file di output, se non lo usi allora arricciare usa il nome del file sul target (-o è spesso molto utile).

Per eseguire lo script usa

./script.sh
    
risposta data 26.01.2013 - 01:20
fonte

Leggi altre domande sui tag