Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Annlix
ShellCheck
提交
5d46c8a5
S
ShellCheck
项目概览
Annlix
/
ShellCheck
与 Fork 源项目一致
Fork自
镜像 / koalaman / ShellCheck
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
ShellCheck
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5d46c8a5
编写于
7月 02, 2013
作者:
V
Vidar Holen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added check for functions used with sudo/xargs/etc
上级
99be2736
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
50 addition
and
0 deletion
+50
-0
ShellCheck/Analytics.hs
ShellCheck/Analytics.hs
+50
-0
未找到文件。
ShellCheck/Analytics.hs
浏览文件 @
5d46c8a5
...
...
@@ -38,6 +38,7 @@ genericChecks = [
,
checkSpacefulness
,
checkQuotesInLiterals
,
checkShebang
,
checkFunctionsUsedExternally
]
checksFor
Sh
=
map
runBasicAnalysis
[
...
...
@@ -871,6 +872,11 @@ isCommandMatch token matcher =
Just
cmd
->
matcher
cmd
Nothing
->
False
getCommandFor
word
=
case
getLiteralString
word
of
Just
str
->
reverse
.
(
takeWhile
(
/=
'/'
))
.
reverse
$
str
Nothing
->
""
prop_checkPrintfVar1
=
verify
checkPrintfVar
"printf
\"
Lol: $s
\"
"
prop_checkPrintfVar2
=
verifyNot
checkPrintfVar
"printf 'Lol: $s'"
prop_checkPrintfVar3
=
verify
checkPrintfVar
"printf -v cow $(cmd)"
...
...
@@ -1390,3 +1396,47 @@ checkQuotesInLiterals t =
Note
WarningC
"Embedded quotes in this variable will not be respected."
)
]
else
return
[]
prop_checkFunctionsUsedExternally1
=
verifyFull
checkFunctionsUsedExternally
"foo() { :; }; sudo foo"
prop_checkFunctionsUsedExternally2
=
verifyFull
checkFunctionsUsedExternally
"alias f='a'; xargs -n 1 f"
prop_checkFunctionsUsedExternally3
=
verifyNotFull
checkFunctionsUsedExternally
"f() { :; }; echo f"
checkFunctionsUsedExternally
t
=
runBasicAnalysis
checkCommand
t
where
invokingCmds
=
[
"chroot"
,
"find"
,
"screen"
,
"ssh"
,
"su"
,
"sudo"
,
"xargs"
]
checkCommand
t
@
(
T_SimpleCommand
_
_
(
cmd
:
args
))
=
let
name
=
getCommandFor
cmd
in
when
(
name
`
elem
`
invokingCmds
)
$
mapM_
(
checkArg
name
)
args
checkCommand
_
=
return
()
functions
=
Map
.
fromList
$
runBasicAnalysis
findFunctions
t
findFunctions
(
T_Function
id
name
_
)
=
modify
((
name
,
id
)
:
)
findFunctions
t
@
(
T_SimpleCommand
id
_
(
_
:
args
))
|
t
`
isUnqualifiedCommand
`
"alias"
=
mapM_
getAlias
args
findFunctions
_
=
return
()
getAlias
arg
=
let
string
=
concat
$
deadSimple
arg
in
when
(
'='
`
elem
`
string
)
$
modify
((
takeWhile
(
/=
'='
)
string
,
getId
arg
)
:
)
checkArg
cmd
arg
=
case
Map
.
lookup
(
concat
$
deadSimple
arg
)
functions
of
Nothing
->
return
()
Just
id
->
do
warn
(
getId
arg
)
$
"Shell functions can't be passed to external commands."
info
id
$
"Use own script or sh -c '..' to run this from "
++
cmd
++
"."
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录