É exatamente assim que o código se parece?
Como é, é uma função que leva dois argumentos, digamos que são arg1
e arg2
.
Em seguida, ele lê um arquivo chamado ORACLE_SID_dbmode.txt
e imprime todas as linhas que contêm arg1 arg2
(unidas por um espaço entre elas) e salva as mensagens de erro em um arquivo chamado arg1
.
Isso é muito confuso, então não acho que esse seja o código real.
Eu imagino que seja realmente isso:
grepstr()
{
grep "$1" "$2" $TMP/"$ORACLE_SID"_dbmode.txt >/dev/null 2>&1
}
Mudanças:
-
"$1 $2"
se torna"$1" "$2"
-
ORACLE_SID
se torna$ORACLE_SID
-
2>$1
se torna2>&1
Se sim, poderia ser usado de duas maneiras:
grepstr options string_or_pattern
por exemplo:
grepstr -i something
permite imprimir (veja abaixo) todas as linhas no arquivo "$ORACLE_SID"_dbmode.txt
que incluem a string something
, Something
, SOMETHING
, etc.
-i
significa maiúsculas e minúsculas e é apenas um exemplo; qualquer opção poderia ser usada.
(Além disso, tecnicamente something
não é uma string, mas um padrão, por exemplo, [0-9]
corresponderia a qualquer dígito).
A segunda maneira é:
grepstr string_or_pattern filename
Nesse caso, ele imprimirá todas as linhas correspondentes a string_or_pattern em filename
ou "$ORACLE_SID"_dbmode.txt
.
Isso parece menos provável, mas é possível, dependendo de como o código é usado.
Também poderia ser chamado assim:
grepstr option1 option2
mas que lida da entrada padrão (por exemplo, o teclado) e imprime todas as linhas que continham "$ORACLE_SID"_dbmode.txt
, o que certamente não é o pretendido, dado que "$ORACLE_SID"_dbmode.txt
parece um nome de arquivo, não uma string ou padrão para combinar.
Se meu palpite estiver correto, o código não é >/dev/null 2>$1
, em vez disso, é >/dev/null 2>&1
, o que significa que as mensagens de saída e de erro não são impressas.
>/dev/null
significa que a saída padrão do grep (ou seja, as linhas correspondentes) está sendo enviada para /dev/null
, que é um arquivo especial que o sistema operacional simplesmente ignora.
2>&1
após >/dev/null
significa que as mensagens de erro também são enviadas.
Portanto, se a saída não for importante, grepstr
provavelmente está sendo chamado assim:
if grepstr...
ou assim:
grepstr...
if [ $? -ne 0 ]
para executar apenas alguns códigos, se houver correspondência.
Em resposta à outra parte da sua pergunta, sim, poderia ser alterado para
grepstr()
{
grep "$@" $TMP/"$ORACLE_SID"_dbmode.txt > /dev/null 2>&1
}
O "$@"
expande para "$1" "$2" "$3"...
(ou seja, quantos argumentos forem fornecidos).
Acho que seria melhor, porque seria mais flexível.
Por outro lado, se precisar de dois argumentos por algum motivo que não consigo pensar, então talvez "$1" "$2"
seja o que o autor pretendia.