Bash se su linea singola


50

Vorrei sapere come posso scrivere se le condizioni all'interno di uno script bash su una sola riga.

Ad esempio, come posso scrivere questo su una sola riga, e poi inserirne un altro come quello successivo?

if [ -f "/usr/bin/wine" ]; then
    export WINEARCH=win32
fi

Lo chiedo perché ho parecchi alias nel mio .bashrc e ho lo stesso .bashrc (sincronizzato) su più sistemi, ma non ho bisogno di tutti gli alias su ciascun sistema. Ne inserisco la maggior parte all'interno di if if, e ora funziona tutto magnificamente ma occupano molto spazio, 3 righe ciascuna più la riga vuota tra di loro (mi piace averle facilmente visibili)

Userò questa tecnica anche per variabili d'ambiente.


4
Puoi anche scrivere[ -f "/usr/bin/wine" ] && export WINEARCH=win32
glenn jackman,

3
Tieni presente che più corto non è necessariamente migliore. È possibile ottenere sottili errori logici con gli operatori logici della shell. Scegli cosa è più facile da leggere e mantenere.
Glenn Jackman,

Risposte:


83

Lo scriveresti come tale:

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi

Nota che questo potrebbe anche essere scritto (come suggerito da @glennjackman):

[ -f "/usr/bin/wine" ] && export WINEARCH=win32

1
Beh, è ​​stato facile ... :) Ora mi sento un po 'imbarazzante per averlo chiesto. Grazie per la risposta, mi ha aiutato molto!
Horațiu Mlendea,

7
C'è una differenza 1. espressione uscirà con stato 0, 2. espressione uscirà con stato non 0 se il file non esiste. Questo può fare la differenza se lo si utilizza in alcune attività automatizzate come la distribuzione in cui il successo dell'attività dipende dallo stato di uscita del comando.
Jānis Gruzis,

@HorațiuMlendea ovviamente è stato facile. se sai come. Ma la sintassi è complicata, ad esempio [1 == 1] è un errore ma [1 == 1] funziona. E i punti e virgola. Come puoi sentirti in imbarazzo per non conoscere qualche sintassi mal progettata. Il tuo "sentimento" non ha alcun senso. Questa è stata una domanda utile, anche se sfortunatamente non capisci il perché.
barlop

@balop no, capisco perfettamente cosa intendi e sono d'accordo. È solo che al momento ho capito i singoli bit che componevano quella sintassi (quella con &&). Di solito è facile e intuitivo mettere insieme le cose, ma come hai detto, questa lingua è piuttosto complicata e non molto intuitiva.
Horațiu Mlendea,

4

Trovo anche che digitando qualsiasi comando complesso se non altro, premi invio, e dopo che viene eseguito basta premere la freccia su. La riga di comando ripeterà naturalmente l'ultimo comando digitato, ma in questo caso inserisce tutto su una riga come richiesto. È un modo cheat, ma è efficace.


5
Nota che questo potrebbe dipendere dalla tua shell (e forse anche dalle impostazioni della tua shell). Alcuni rapidi test sul mio computer mostrano che questo funziona in Bash (quindi ha un +1), ma Zsh conserva le interruzioni di riga quando torna ai comandi precedenti.
settembre
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.