Como posso envolver um comando complexo com um script de shell?

3

Estou usando optirun de bumblebee . Ele foi projetado para iniciar minha segunda GPU, executar o comando fornecido e encerrar a segunda GPU no final.

Um exemplo simplificado:

optirun echo test | cat

No entanto, há um erro em optirun que requer que eu execute agora um comando de acompanhamento para forçar a desativação da GPU.

É possível envolver facilmente algum comando complexo, como echo test | cat em um script de shell, de modo que eu possa executar o optirun e, em seguida, seguir no final com o comando (minha solução alternativa para o bug)?

A citação e tudo parece ser um problema que me impede de fazer isso com um simples script de shell.

    
por David Parks 23.12.2016 / 03:18

2 respostas

5

Estou confiante de que você está simplesmente atrás de $@ , a lista de argumentos para um script.

Exemplo trivial:

$ cat >cc.sh <<EOF
#!/bin/sh
head "\$@"
echo I AM DONE
EOF
$ chmod 755 cc.sh

Funciona com argumentos:

$ ./cc.sh cc.sh 
#!/bin/sh
head "$@"
echo I AM DONE
I AM DONE

Funciona com STDIN / STDOUT

$ cat cc.sh | ./cc.sh | tail -n 2
echo I AM DONE
I AM DONE

Funciona com uma mistura:

$ cat cc.sh | ./cc.sh -n 2 | tail -n 2
head "$@"
I AM DONE

Portanto:

#!/bin/sh
optirun "$@"
rmmod <mod> [perhaps >/dev/null 2>&1 if you need to ignore errors from rmmod]
    
por 23.12.2016 / 03:40
4

Se no seu exemplo de optirun echo test | cat , você só quer que o echo test seja dado ao optirun, que é o que acontece quando você digita o exemplo na linha de comando, então

#!/bin/sh
optirun "$@"
rmmod workaround

é tudo que você precisa. Coloque em um script chamado "myopti" e você pode usar myopti echo hello | cat e obter a limpeza.

    
por 23.12.2016 / 03:40