É 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_SIDse torna$ORACLE_SID -
2>$1se 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.