Executando o comando no final do script

0

Eu quero copiar alguns arquivos, mas quero aguardar a execução dos comandos de cópia até o final do script. A razão para isso é que posso esperar que uma entrada do usuário interrompa o script pela metade, e eu não farei um diretório parcialmente copiado.

Existe alguma maneira que eu possa esperar para executar comandos específicos até exit 0 ser visto no mesmo programa?

#!/bin/bash
for f in 'find something/ -newer something_else -type f'; do
   #Expecting user input interruption
   cp "$f" . #I want to wait executing this
done

if [ -f something_else ]; then
   exit 0 #I want it executed here
else 
   exit 1
fi
    
por Martin 03.03.2018 / 13:09

1 resposta

1

A solução mais fácil seria fazer a cópia mais tarde:

#!/bin/bash

# something something script stuff

[ ! -f somefile ] && exit 1

find something -type f -newer somefile -exec cp {} . ';'

Se você deseja que o usuário confirme cada cópia, use -ok em vez de -exec em find :

find something -type f -newer somefile -ok cp {} . ';'

Primeiro, faça um loop sobre o arquivo para criar uma lista de arquivos a serem copiados, solicitando ao usuário a entrada de cada arquivo, e então execute a cópia:

copy_these=$(mktemp)

find something -type newer somefile \
    -exec bash -c '
        read -p "Copy $0? [y/n/q]: "
        case "$REPLY" in
            [yY]*) printf "%s\n" "$0" ;;
            [qQ]*) exit 1 ;;
        esac' {} ';' >"$copy_these"

# do other stuff

# then copy the files

xargs cp -t . <"$copy_these"

rm -f "$copy_these"

Observe que isso pressupõe que todos os nomes de arquivos sejam bem comportados (sem novas linhas) e que o GNU cp seja usado.

    
por 03.03.2018 / 13:16