tom*_*KPZ 4 linux bash shell grep tr
我的系统上有这个脚本:
#! /bin/grep cat
caterpillar
cat
lol
morecat
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了预期的输出,
#! /bin/grep cat
caterpillar
cat
morecat
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用tr而不是脚本
#! /usr/bin/tr 'a' 'e'
caterpillar
cat
lol
morecat
Run Code Online (Sandbox Code Playgroud)
我希望得到
#! /usr/bin/tr 'a' 'e'
ceterpiller
cet
lol
morecet
Run Code Online (Sandbox Code Playgroud)
但是没有打印,如果我手动输入cat,我会得到c/t.如何将脚本更改为像第一个一样?
小智 8
shebang行只支持一个参数.字面上包含空格,没有引用.所以你在那里运行的命令与shell相同:
tr "'a' 'e'"
Run Code Online (Sandbox Code Playgroud)
如果你跑了,你会看到tr抱怨没有第二个参数.那么为什么你的剧本不抱怨?那是第二个问题.shebang cat或work grep因为cat并将grep输入文件的名称作为参数,shebang将脚本的名称添加到参数列表中.(这#!/bin/sh是执行脚本的基本情况所必需的/bin/sh scriptname)
你正在跑步
tr "'a' 'e'" yourscriptname
Run Code Online (Sandbox Code Playgroud)
它提供tr了它需要的2个参数,然后从stdin读取,从你不想要的一组字符翻译到你不想要的另一组字符.
如果shebang系列有一个功能齐全的shell解析器,你可以使用
#!/usr/bin/tr 'a' 'e' <
Run Code Online (Sandbox Code Playgroud)
添加到末尾的文件名将成为输入.但是shebang在内核中只是一个简单的东西,并不是那么特别.