쉘 스크립트를 사용하여 복잡한 명령을 캡슐화하는 방법은 무엇입니까?

쉘 스크립트를 사용하여 복잡한 명령을 캡슐화하는 방법은 무엇입니까?

저는 두 번째 GPU를 시작하고, 주어진 명령을 실행하고, 마지막으로 두 번째 GPU를 종료하도록 설계되었습니다 optirun.bumblebee

단순화된 예:

optirun echo test | cat

optirun그러나 GPU를 강제로 종료하려면 이제 후속 명령을 실행해야 하는 오류가 있습니다 .

echo test | catoptirun을 실행한 다음 마지막에 명령을 사용하여 추적할 수 있도록 일부 복잡한 명령(예: 쉘 스크립트)을 쉽게 래핑할 수 있습니까 (내 버그 해결 방법)?

간단한 쉘 스크립트를 사용하여 이 작업을 수행할 수 없도록 하는 인용 및 모든 문제가 있는 것 같습니다.

답변1

$@나는 당신이 스크립트의 매개변수 목록을 따르고 있다고 생각합니다 .

간단한 예:

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

사용 매개변수:

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

STDIN/STDOUT에 적용 가능

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

혼합물에 적합:

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

그래서:

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

답변2

귀하의 예에서 명령줄에 예를 입력할 때 발생하는 optirun에 할당하려는 경우 다음을 수행하십시오 optirun echo test | cat.echo test

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

당신이 필요한 전부입니다. "myopti"라는 스크립트를 추가하면 이를 사용 myopti echo hello | cat하고 정리할 수 있습니다.

관련 정보