linux – 如何检测使用通配符(星号*)作为shell脚本的参数?

linux – 如何检测使用通配符(星号*)作为shell脚本的参数?,第1张

概述在我的脚本中,如何区分何时使用星号通配符而不是强类型参数? 这个 # myscript * 由此 # myscript p1 p2 p3 ... (where parameters are unknown number) shell扩展了通配符.到运行脚本时,通配符已经扩展,并且脚本无法判断参数是通配符还是显式列表. 这意味着您的脚本需要来自其他非脚本的帮助.特别是,在命令行处理之前运行的东西.那 在我的脚本中,如何区分何时使用星号通配符而不是强类型参数?

这个

# myscript *

由此

# myscript p1 p2 p3 ... (where parameters are unkNown number)
解决方法 shell扩展了通配符.到运行脚本时,通配符已经扩展,并且脚本无法判断参数是通配符还是显式列表.

这意味着您的脚本需要来自其他非脚本的帮助.特别是,在命令行处理之前运行的东西.那个东西是别名.这是你的别名

alias myscript='set -f; globstopper /usr/bin/myscript'

这样做是设置一个名为’myscript’的别名,所以当有人输入’myscript’时,这就是运行的东西.别名做了两件事:首先,它用set -f关闭通配符扩展,然后它运行一个名为globstopper的函数,传入脚本的路径,以及其余的命令行参数.

那么globstopper功能是什么?这个:

globstopper() {  if [[ "" == "*" ]]    then echo "You cannot use a wildcard"    return  fi  set +f  "$@";}

这个功能做了三件事.首先,它检查脚本的参数是否是通配符(警告:它只检查第一个参数,它只检查它是否是一个简单的星;延伸它以覆盖更多的情况留下作为练习读者).其次,它重新开启了通配符扩展.最后,它运行原始命令.

为此,您需要能够在用户的shell中设置别名和shell函数,并要求您的用户使用别名而不是脚本.但如果你能做到这一点,它应该有效.

我应该补充一点,我在这里倚重金碧辉煌的西蒙·塔特姆的文章“Magic Aliases: A Layering Loophole in the Bourne Shell”.

总结

以上是内存溢出为你收集整理的linux – 如何检测使用通配符(星号*)作为shell脚本的参数?全部内容,希望文章能够帮你解决linux – 如何检测使用通配符(星号*)作为shell脚本的参数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1021578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存