重写没有空格的shell脚本

时间:2017-12-05 15:49:36

标签: bash shell pam

是否可以在不使用空格,制表符或换行符的情况下编写类似的shell脚本:

/path/to/foo; test $? -ne 6

该脚本运行另一个程序,如果返回代码为6,则失败。

背景

我在pam_exec.so和另一个控制系统访问的程序中一起使用它。它与安全性无关,我想确保在有关该其他脚本的内容失败时(rc 6除外)访问系统。另一个程序有点脆,可能由于各种原因而中断,或者由于安装混乱而无法使用。我目前使用包装器脚本,但需要再次部署,我需要确保该脚本的部署与pam配置一致。我更喜欢在pam配置中使用自包含的便携式解决方案。

不幸的是1)pam_exec.so不关心它调用的程序的返回代码,2)pam.d配置解析器不关心引号,它只是按" \n\t"拆分参数,所以我不能用

... pam_exec.so /bin/bash -c "/bath/to/foo; test$? -ne 6"

我很好奇是否有办法重新制定它不需要空格并且可以在这里使用。

2 个答案:

答案 0 :(得分:4)

使用算术语句,在解析过程中需要较少的空格。

bash -c '/path/to/foo;(($?!=6))'

答案 1 :(得分:0)

我会创建一个包装器脚本,而不是处理空格:

#!/bin/bash
# /usr/local/sbin/foo-wrapper
/bath/to/foo
test $? -ne 6

pam config:

... pam_exec.so /usr/local/sbin/foo-wrapper