Adicione alguma opção de execução seca ao script

1

Eu tenho um script que aceita um argumento e, se não estiver definido, usa um padrão.

VALUE=$1
if [[ -z "$VALUE" ]];  
   VALUE=foo #some function returns the default  
fi  

Então o roteiro continua fazendo algumas coisas.
Eu gostaria de "melhorar" e fornecer uma opção dry run . Então, se você que é passado, teríamos algo como

if [[ -z "$DRY" ]];  
  echo "command x y z"  
else 
  command "x" "y" "z"  
fi  

Como posso fazer isso?

    
por Jim 27.03.2018 / 12:14

1 resposta

2

Faça a análise correta da linha de comando e, em seguida, escolha como executar o funcionamento a seco real.

A análise da linha de comando:

#!/bin/sh

dry_run=0

while getopts 'n' opt; do
    case "$opt" in
        n) dry_run=1 ;;
        *) echo 'error in command line parsing' >&2
           exit 1
    esac
done

Agora, $dry_run será 1 se o usuário invocar o script com a opção de linha de comando -n .

Em seguida, escolha como fazer a corrida a seco. Uma maneira simples seria usar set -v (exibir os comandos conforme eles são lidos pelo shell) seguido por set -n (não executar qualquer coisa ):

if [ "$dry_run" -eq 1 ]; then
    set -v
    set -n
fi

Isso pode não ser o que você deseja, pois exibiria o script.

Em vez disso, você pode optar por fazer

if [ "$dry_run" -eq 1 ]; then
    cmd=echo
else
    cmd=''
fi

e, em seguida, prefixar os comandos específicos que você gostaria de executar com $cmd :

$cmd ls -l
$cmd echo "hello world"
    
por 27.03.2018 / 13:08