Eu tenho um script (digamos Task.sh
) (com permissão executável):
Pseducódigo:
if [[ Not called from inside a script ]]; then
echo 'Not called from inside a script'
else
echo 'Called from a script'
fi
Eu tenho um script que diz Main.sh
(com permissão executável):
Value=$(Task.sh)
echo "${Value}"
Resultado esperado
$ Task.sh
Not called from inside a script
$ Main.sh
Called from a script
Pedido de ajuda
Por favor, sugira qual condicional colocar no pseudocódigo paraTask.sh
Uma opção é alterar um pouco os requisitos de " estou executando um script? " para " estou conectado a um terminal ou canal/arquivo? ". Isso permitiria o caso de
Task.sh >/tmp/file
: não ser chamado a partir de um script, mas parece que deveria gravar no arquivo e não na área de transferência.Se isso for aceitável, você pode usar um teste simples para stdout conectado a um terminal:
As ferramentas gostam
ls
etty
operam de maneira diferente dependendo da situação de uso, usando uma abordagem muito semelhante. Por exemplo, em um diretório com diversas entradas contrastamls
els | cat
Fazer com que uma ferramenta copie algo para a área de transferência parece raro o suficiente para que seja melhor ser explícito sobre isso e fazê-lo somente quando solicitado.
Portanto, uma opção é verificar o script em busca de um argumento de linha de comando solicitando o uso da área de transferência e, caso contrário, imprimir como padrão para stdout.
Se você não usar argumentos de linha de comando no script, é tão fácil quanto:
ou inclua-o em seu
getopt
(s) loop(s) se estiver usando argumentos de linha de comando.Isso significa que um usuário interativo precisará se lembrar de adicionar a opção, mas pode simplesmente instalar um alias
.bashrc
ou equivalente para fazer isso: