Bash - Soppressione dell'output su STDOUT

4

Ho scritto uno script per nuove installazioni macOS che installano Homebrew, Cask e un sacco di app che mi piacciono, oltre a creare un file .vimrc .

Grazie a una risposta di daniel Azuelos (che si trova qui: Il modo migliore per verificare in bash se sono installati gli strumenti della riga di comando? ), una parte dello script verifica se sono installati gli strumenti da riga di comando Xcode.

Quando gli strumenti da riga di comando non sono installati, questo errore viene visualizzato all'utente:

xcode-select: error: unable to get active developer directory, use 'sudo xcode-select --switch path/to/Xcode.app' to set one (or see 'man xcode-select')

Spero che qualcuno possa aiutarmi a sopprimere questo output.

La funzione che viene eseguita per eseguire il controllo degli strumenti da riga di comando è:

function check_clt() {
    if type xcode-select >&- && xpath=$( xcode-select --print-path ) && test -d "${xpath}" && test -x "${xpath}" ; then
        echo ""
        echo "The required Xcode command-line-tools are already installed! Moving on!"
        sleep 3
    else
        instructions
        sleep 45
        xcode-select --install
    fi
}

Credo di poter usare 2 > /dev/null per sopprimere l'errore, ma non sono sicuro della funzione dove dovrebbe andare? L'ho messo prima di ogni && nell'istruzione if, ma il messaggio di errore è ancora apparso.

Utilizzando il suggerimento di Nimesh, ho modificato la funzione:

function check_clt() {
if type xcode-select 2>/dev/null >&- && xpath=$( xcode-select --print-path ) 2>/dev/null && test -d "${xpath}" 2>/dev/null && test -x "${xpath}" 2>/dev/null ; then
    echo ""
    echo "The required Xcode command-line-tools are already installed! Moving on!"
    sleep 3
else
    instructions 2>/dev/null
    sleep 45
    xcode-select --install
fi

}

L'esecuzione dello script produce ancora l'errore all'utente:

Last login: Tue Sep  4 20:40:13 on ttys000
vimusrs-Mac:~ vimusr$ cd Desktop/
vimusrs-Mac:Desktop vimusr$ chmod +x mai.sh 
vimusrs-Mac:Desktop vimusr$ ./mai.sh 
xcode-select: error: unable to get active developer directory, use 'sudo xcode-select --switch path/to/Xcode.app' to set one (or see 'man xcode-select')
    
posta vim_usr 05.09.2018 - 04:41
fonte

2 risposte

1

Risulta il problema la riga xpath=( xcode-select --print-path ) nell'istruzione if della funzione originale. Inoltre, una volta eliminato il messaggio di errore, ho notato che c'era un messaggio di stdout non necessario, quindi ho deciso di sopprimerlo.

Sono stato in grado di sopprimere i messaggi stderror e stdout cambiando la funzione nel modo seguente:

function check_clt() {
    if type xcode-select >/dev/null 2>&1 >&- && xcode-select -p >/dev/null 2>&1 && test -d $(xcode-select -p) >/dev/null 2>&1 && test -x $(xcode-select -p) >/dev/null 2>&1; then
        echo ""
        echo "The required Xcode command-line-tools are already installed! Moving on!"
        sleep 3
    else
        instructions
        sleep 45
        xcode-select --install
    fi
}
    
risposta data 05.09.2018 - 08:17
fonte
0

Modifica lo script bash come segue:

function check_clt() {
    if type xcode-select 2>/dev/null >&- && xpath=$( xcode-select --print-path ) 2>/dev/null && test -d "${xpath}" 2>/dev/null && test -x "${xpath}" 2>/dev/null ; then
        echo ""
        echo "The required Xcode command-line-tools are already installed! Moving on!"
        sleep 3
    else
        instructions 2>/dev/null
        sleep 45
        xcode-select --install
    fi
}

Reindirizzare l'errore standard (STDERR) a /dev/null ovunque un comando possa generare un errore. Nota che se instructions è composto da più comandi, aggiungi 2>/dev/null prima di ogni chiamata di comando.

    
risposta data 05.09.2018 - 05:11
fonte

Leggi altre domande sui tag