Tentando usar se mais de getopts passar um argumento do terminal e capturar essa informação em um log

0

Estou tentando passar um argumento de uma cadeia de comando no terminal. Estou modificando um script para detectar esse comando e permitir que o usuário veja o que o script está fazendo.

Isso é o que estou tentando detectar.

[root@linuxtest] ./testscript.sh $1 -v

Este comando consiste em verbalizar o que o script está fazendo no terminal, bem como registrá-lo em um arquivo de log. Agora, dependendo do usuário, esse script detecta os comandos que um usuário inseriu:

sh testscript.sh $1 -v

ou

./teshscript.sh -v

Agora, dentro do script já existe um comando:

exec 1 > {LOG} 2 > & 1;

Isso permite que os ecos sejam registrados no arquivo. No entanto, isso não será exibido no terminal, mas será registrado no arquivo de texto de qualquer caminho que o arquivo {LOG} esteja armazenado. O que eu tenho agora é isto:

name='sh testscipt.sh $1 -v'

if [[ -n "$name" ]]; then
   2>&1 2>&- | tee -a ${LOG}
else
   1> {LOG} 2>&1
fi

Mas não tenho certeza de qual deve ser a lógica de quando isso deve ser configurado. Eu pesquisei "getops" para permitir um caso, mas não estou muito certo do que a sintaxe para isso. Então, em essência, eu estou tentando permitir que o usuário execute isso, mas quando eles querem ver isso eles teriam que inserir os comandos como indicado para visualizar os ecos no terminal.

Qual é a maneira correta de fazer isso usando getops / case para o switch, e passar argumentos para serem detectados quando um usuário digita os comandos?

    
por Emerald Knight 28.06.2017 / 22:08

1 resposta

0

Redirecionamentos e pipes não fazem parte de um comando; eles são a estrutura do pipeline entre comandos. Dessa forma, você não poderá procurar um parâmetro que redirecione a saída padrão ou o erro padrão observando os argumentos da linha de comando.

Você pode, no entanto, consultar /proc/$$/fd e ver quais 0 (entrada padrão), 1 (saída padrão) e 2 (erro padrão) estão vinculados.

$ cat foo.sh
#!/bin/bash
echo "My pid is $$"
ls -l /proc/$$/fd/
$ ./foo.sh 2> /tmp/errorsgohere
My pid is 30842
total 0
lrwx------ 1 username username 64 Jun 28 14:33 0 -> /dev/pts/0
lrwx------ 1 username username 64 Jun 28 14:33 1 -> /dev/pts/0
l-wx------ 1 username username 64 Jun 28 14:33 2 -> /tmp/errorsgohere
lr-x------ 1 username username 64 Jun 28 14:33 255 -> /home/username/foo.sh
    
por 28.06.2017 / 23:12