加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Shell Scripting:在shebang中使用grep和tr

发布时间:2020-12-14 01:19:20 所属栏目:Linux 来源:网络整理
导读:我的系统上有这个脚本: #! /bin/grep catcaterpillarcatlolmorecat 当我运行它时,我得到了预期的输出, #! /bin/grep catcaterpillarcatmorecat 但是,如果我使用tr而不是脚本 #! /usr/bin/tr 'a' 'e'caterpillarcatlolmorecat 我希望得到 #! /usr/bin/tr 'a'
我的系统上有这个脚本:

#! /bin/grep cat

caterpillar
cat
lol
morecat

当我运行它时,我得到了预期的输出,

#! /bin/grep cat
caterpillar
cat
morecat

但是,如果我使用tr而不是脚本

#! /usr/bin/tr 'a' 'e'

caterpillar
cat
lol
morecat

我希望得到

#! /usr/bin/tr 'a' 'e'

ceterpiller
cet
lol
morecet

但是没有打印,如果我手动输入cat,我会得到c / t.如何将脚本更改为像第一个一样?

解决方法

shebang行只支持一个参数.字面上包含空格,没有引用.所以你在那里运行的命令与shell相同:

tr "'a' 'e'"

如果你运行它,你会看到tr抱怨缺少第二个参数.那么为什么你的剧本不抱怨?那是第二个问题. shebang cat或grep工作,因为cat和grep将输入文件的名称作为参数,shebang将脚本的名称添加到参数列表中. (这是#!/ bin / sh脚本作为/ bin / sh scriptname执行的基本情况所必需的)

你正在跑步

tr "'a' 'e'" yourscriptname

它给了tr它需要的2个参数,然后它从stdin读取,从你不想要的一组字符翻译成你不想要的另一组字符.

如果shebang系列有一个功能齐全的shell解析器,你可以使用

#!/usr/bin/tr 'a' 'e' <

添加到末尾的文件名将成为输入.但是shebang在内核中只是一个简单的东西,并不是那么特别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读