首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不管是不是她的

不管是不是她的
EN

Unix & Linux用户
提问于 2019-05-06 10:59:02
回答 2查看 4.5K关注 0票数 3

我想在shebang中使用一个程序,所以我创建了一个名为的脚本:

代码语言:javascript
复制
#!<mypgm>

我还希望能够直接从命令提示符运行。

代码语言:javascript
复制
<mypgm> args...

到目前为止没有问题。

我希望能够从带有参数的命令提示符中运行。

代码语言:javascript
复制
<myscript> blabla

反过来,使用以下参数调用:

代码语言:javascript
复制
<mypgm> <myscript> blabla

现在,我需要知道 blabla是什么时候使用shebang调用的,或者不使用:

代码语言:javascript
复制
myscript blabla # uses the shebang
-or-
<mypgm> myscript blabla   # directly in the command prompt.

我查看了环境变量(编辑:<===错误断言(进程表))、进程表(父进程),但是没有找到任何方法来改变。

到目前为止我唯一发现的是:

代码语言:javascript
复制
grep nonvoluntary_ctxt_switches /proc/$/status

当这一行就在“谢邦”之后时,当通过“直接调用”时,该值通常为2(有时为3),而对于直接调用,则为1(有时为2)。由于不稳定和依赖于进程调度(进程从CPU中取出的次数),我想知道这里是否有人有更好的解决方案。

EN

回答 2

Unix & Linux用户

发布于 2019-05-06 17:36:36

真正的问题在于您设计<mypgm>命令行语法的方式。与其试图支持两种解释其论点的方法,不如提供两种方法来调用它。

Shebang命令是用来执行脚本内容的脚本引擎;它可能是bashperl或其他类型的命令,但它的调用带有要执行的脚本的文件名。bash是如何做到的?这不是猜测。如果遇到任何不像选项(或选项的参数)的参数,则将其视为要执行的脚本;之后的参数将传递给脚本。例如:

代码语言:javascript
复制
/bin/bash -x -e somename foo bar

在这里,bash将查找文件somename,并尝试将其作为带有参数foobar的脚本运行。您应该做同样的事情,因为有一天您可能希望在命令行上编写<mypgm> <myscript>

如果您希望脚本少使用<mypgm>是默认的,则可以要求将脚本与<mypgm> -f <myscript>一起传递。sed就是这样做的。然后你就会把它用在像这样的线上:

代码语言:javascript
复制
#!<mypgm> -f

如果您希望脚本大小写是默认的,就像bashperl一样,创建一个选项,上面写着“这次没有脚本”。为此,您可以使用--,这样<mypgm> -- one two three就不会尝试将one (或其他任何东西)作为脚本运行。在这种情况下,谢邦一行将只读到:

代码语言:javascript
复制
#!<mypgm>
票数 9
EN

Unix & Linux用户

发布于 2019-05-07 01:32:20

您可以使用常规的calc程序,比如calc PI + 3 (并作为扩展calc -f script_file_name)。

对于使用在雪邦创建链接(只有硬链接工作,如果我记得正确)命名的。calcf,然后在calc程序中检查可执行名称(对于C/C++,请查看函数main中的argv[0] )。您现在有了脚本中的#! /some/path/calcf

这样,您就可以避免在命令行中使用-c之类的选项(保存了3次击键),而且也不需要在shebang中使用选项(这在Scott的注释不管是不是她的中可能存在问题)。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/517370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档