>标准shell脚本:
>#!/ bin / bash
> Python:
>#!/usr/bin/env python
脚本似乎在没有标题的情况下工作正常,但如果标题是标准的,那么它们就有一个原因,它们不应该被忽略.如果它有效果,那么它是一个有价值的工具,可以用来完成更多.
最简单的说,我想知道MysqL脚本使用什么标头以及标题,Python和MysqL脚本的标题.理想情况下,我想要一个通用的标题列表或理解如何根据正在使用的程序创建标题.
解决方法 内核如何执行事物简化(有点),POSIX系统中的内核有两种方式知道如何执行程序.一,如果程序是内核理解的二进制格式(例如ELF),内核可以“直接”执行它(更多细节超出范围).如果程序是以shebang开头的文本文件,例如
#!/usr/bin/somebinary -arg
或者你有什么,内核实际上执行命令就像它被指示执行一样:
/usr/bin/somebinary -arg "#!/usr/bin/python"
其中$0这里是您刚刚尝试执行的脚本文件的名称. (所以你可以立即告诉为什么这么多脚本语言使用#作为评论启动器 – 这意味着他们不必将shebang视为特殊的.)
PATH和env命令
内核不会查看PATH环境变量来确定您正在讨论的可执行文件,因此如果您要将python脚本分发给可能安装了多个版本的python的系统,则无法保证会有
#!/usr/bin/env python
然而,env是POSIX,所以你可以指望它存在,它将在PATH中查找python.从而,
#!/usr/bin/env MysqLuse mydb;select * from mytbl;
将使用PATH中找到的第一个python执行脚本.
BASH,SH和调用的特殊含义
有些程序对它们的调用方式有特殊的语义.特别是,在许多系统上/ bin / sh是另一个shell的符号链接,例如/ bin / bash.虽然bash不包含sh的完美POSIXLY_STRICT实现,但当它被调用为/ bin / sh时,它比调用plain-old-bash时更严格.
MysqL和arg的局限性
shebang行可以是长度限制的,从技术上讲,它只能支持一个参数,所以MysqL有点棘手 – 你不能指望将用户名和数据库名称传递给MysqL脚本.
#!/usr/bin/MysqL -euse mydb;select * from mytbl;
将失败,因为内核将尝试MysqL“$0”.即使您在.my.cnf文件中拥有凭据,MysqL本身也会尝试将“$0”视为数据库名称.同样:
MysqL < my_sql_commands
将失败因为再次,“$0”不是表名(你希望).
似乎没有适当的语法以这种方式直接执行MysqL脚本.最好的办法是直接将sql命令传递给MysqL:
总结以上是内存溢出为你收集整理的linux – 如何知道要使用的脚本标头及其重要性?全部内容,希望文章能够帮你解决linux – 如何知道要使用的脚本标头及其重要性?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)