Estou migrando para o Linux e preciso converter o seguinte cmd
comando do Windows:
fc file1.txt file2.txt | find /i "no se han encontrado diferencias" > nul && set equal=yes
Acho que fc
pode ser substituído por diff
ou comm
, find
por grep
, mas não sei como fazer a &&
parte, talvez uma if
declaração...
Adivinhando o que esses comandos do Windows fazem, eu diria que o equivalente em um
sh
script POSIX seria:que definiria a
equal
variável parayes
se os dois arquivos puderem ser lidos e tiverem conteúdo idêntico (byte a byte).Como alternativa ao
cmp -s
, em alguns sistemas, incluindo os baseados em Linux, você pode usar odiff -q
.diff -q
(q
for quiet ), ao contrário da maioriacmp -s
(s
for silent ) reportaria uma mensagem de erro se algum dos arquivos não pudesse ser lido. Enquanto as implementações GNU dediff
ecmp
ambos primeiro verificam se os dois arquivos são caminhos para o mesmo arquivo (incluindo como links físicos ou simbólicos um do outro) ou são de tamanhos diferentes para evitar a necessidade de lê-los, abusybox
implementação decmp
não enquantobusybox
diff
faz. Portanto, nesses sistemas que usambusybox
, você pode preferirdiff -q
por motivos de desempenho.Seu comando do Windows parece comparar dois arquivos com o
fc
comando e procura na saída uma mensagem "sem diferenças"; se virmos essa mensagem, defina a variávelequal
comoyes
.O comando unix
cmp
pode ser usado para comparar arquivos e retorna zero de saída se eles corresponderem, e podemos testar isso diretamente, portanto, não há necessidade de uma função de "saída de pesquisa".No
bash
shell, o&&
operador é um operador lógico e para controle de processos, permitindo que um segundo processo seja executado se o primeiro processo não sair com erros. Um pipe duplo (||
) faz o mesmo, mas é uma instrução OR e será executado se o comando anterior NÃO FOI bem-sucedido.Então, dado um arquivo chamado
sample_file
com o conteúdo de:O comando
Vai ecoar "encontrado" e este -
Vai ecoar "não encontrado"
Simplesmente substitua as instruções echo pela sua atribuição de variável.