A segunda forma de redirecionamento de E / S ( <(cmd)
) simplesmente não se comporta da mesma maneira que o primeiro formulário ( cmd | other-cmd
).
O primeiro conecta a saída de cmd
à entrada de other-cmd
, mas o segundo substitui um caminho /dev/fd
ou um pipe nomeado caminho para o comando. A saída padrão de cmd
está vinculada à outra extremidade desse canal, mas isso só parece equivalente com comandos como cat
, que lerá de stdin ou de um caminho de arquivo. sqlite3
não se comporta dessa maneira, portanto, expõe a diferença entre as duas formas de redirecionamento de E / S.
sqlite3
espera instruções SQL opcionais depois do caminho do BD, então ele tenta analisar esse caminho substituído como SQL e falha.
Aliás, isso significa que você não precisa do redirecionamento de E / S. Este comando faz o que você está querendo de forma mais eficiente do que qualquer forma que você tentou:
$ sqlite3 ~/.config/google-chrome/Default/History "select count(*) from urls"
Note que você não precisa do ponto-e-vírgula terminador de instrução ao passar uma única instrução SQL para sqlite3
como um parâmetro de linha de comando.