是否可以在不使用空格,制表符或换行符的情况下编写类似的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"
我很好奇是否有办法重新制定它不需要空格并且可以在这里使用。
答案 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