bash redireciona para o arquivo se o arquivo não existir

0

Esta é uma pergunta idiota, mas não consigo encontrar a resposta on-line, tenho este código bash:

  if [[ ! -f "$HOME/.oresoftware/package.json" ]]; then
       cat "node_modules/@oresoftware/package.json" > "$HOME/.oresoftware/package.json";
    fi

mas existe uma maneira de redirecionar apenas para um arquivo se ele não existir em apenas uma linha de código? algo assim:

   cat "node_modules/@oresoftware/package.json" ?> "$HOME/.oresoftware/package.json";

isso seria divertido, eu acho

    
por Alexander Mills 14.05.2018 / 02:28

1 resposta

3

Se você definir a opção noclobber , o bash se recusará a sobrescrever um arquivo existente:

$ set -C    # or set -o noclobber
$ touch foo
$ cat bar > foo
bash: foo: cannot overwrite existing file

Então:

set -C
cat "node_modules/@oresoftware/package.json" > "$HOME/.oresoftware/package.json"

Se você deseja ignorar o status de saída, é possível adicionar um ! antes do comando cat

set -C; ! cat "node_modules/@oresoftware/package.json" > "$HOME/.oresoftware/package.json"
    
por 14.05.2018 / 02:47