如何使用 shell 脚本封装复杂的命令?

如何使用 shell 脚本封装复杂的命令?

我正在使用optirun来自bumblebee.它旨在启动我的第二个 GPU,运行给定的命令,最后关闭第二个 GPU。

一个简化的例子:

optirun echo test | cat

然而,有一个错误optirun要求我现在运行后续命令来强制 GPU 关闭。

我可以轻松地包装一些复杂的命令(例如echo test | cat在 shell 脚本中),以便我可以运行 optirun,然后在最后使用命令(我的 bug 解决方法)进行跟踪吗?

引用和所有内容似乎是一个问题,阻止我使用简单的 shell 脚本来完成此操作。

答案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 echo test | cat您只想echo test将 赋予 optirun,这就是您在命令行键入示例时发生的情况,然后

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

是你所需要的全部。放入一个名为“myopti”的脚本,您就可以使用myopti echo hello | cat并进行清理。

相关内容