C'è un modo per creare uno script e renderlo eseguibile con meno codice di questo?


8

Il mio codice per creare uno script eseguibile

touch script.sh && echo "echo 'Hello World'" > script.sh && sudo chmod +x script.sh

2
@ShamFiorin Volevo sottolineare la prima parte della risposta ai dessert. Dovresti provare a usare sudocon molta parsimonia. Prendere l'abitudine di buttarlo in giro può essere pericoloso. In questo caso possiedi lo script che hai creato in modo da poter fare qualsiasi cosa tu voglia con le autorizzazioni, senza bisogno di sudo.
Marie,

2
Correlati in modo generale: consigli per giocare a golf a Bash
Digital Trauma,

Risposte:


18

Puoi tralasciare l'intero touchcomando e non è necessario utilizzarlo sudo. Per abbreviare ulteriormente la riga di comando è possibile utilizzare bashHistory Expansion per salvare il nome del file la seconda volta e omettere gli spazi non necessari:

echo "echo 'Hello World'" >script.sh&&chmod +x !#:3

L'espansione della cronologia sostituisce !#:3la quarta parola della riga di comando corrente, che nel tuo caso è il nome del file script.sh. Naturalmente questo deve essere adattato nel caso in cui si modifichi il primo comando, ad esempio:

>script.sh echo "echo 'Hello World'"&&chmod +x !#:1

Nota che uno script valido ha bisogno di uno shebang :

>script.sh echo -e "#!/bin/bash\necho 'Hello World'"&&chmod +x !#:1

Se hai bisogno di questa catena di comandi più spesso ti consiglio di definire una funzione , in questo modo dovrai solo digitare il nome della funzione. Un modo altrettanto adattabile, sebbene più lungo, è l'uso di una variabile che contiene il nome file:

f=script.sh;>$f echo "echo 'Hello World'"&&chmod +x $f

Se il tuo nome file contiene caratteri speciali, non dimenticare di citarli correttamente .


20

Il installcomando di (parte di GNU coreutils insieme cp, mv, rm, ecc) può copiare un file, mentre anche l'impostazione sua proprietà e le autorizzazioni e la creazione di directory padre, se necessario. Di default renderà eseguibile il nuovo file. Non capisce ' -' ma /dev/stdinpuò essere utilizzato invece:

install /dev/stdin script.sh <<< "echo Hello World"

Quanto sopra usa una ' stringa qui ' per fornire il testo su stdin, che è leggermente più corto del reindirizzamento. Gli argomenti echonon devono essere citati a meno che non contengano caratteri con significato speciale.


nota che l'eredità è un Bashismo - un'eredità sarebbe portatile
Steven Penny,

3
Bella idea È inoltre possibile utilizzare una sostituzione di processo :install <(echo echo Hello World) script.sh
Digital Trauma

8

Preferisco usare catper attività come questa:

cat > script.sh && chmod +x script.sh
#!/bin/sh
echo 'Hello World'Enter
Ctrl+D

1

Potresti anche tralasciare l'intero chmod e usare umask invece prima dell'eco. Dovrebbe salvarti qualche byte. Shebang è opzionale fintanto che usi comandi compresi da ogni shell (principalmente bourne e C).


5
Come lo faresti esattamente?
wjandrea,

Non è possibile utilizzare umaskper l'impostazione del bit eseguibile per impostazione predefinita ...
Ravexina,
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.