如何强制/ bin / bash解释器为一个衬垫

时间:2014-01-03 14:39:55

标签: bash shell sh

我有一个使用python os.system()

执行的单行bash命令
for FILENAME in mydir/PRE_*; do echo $FILENAME `printf ${FILENAME:0:12}; printf ${FILENAME:23}`; done;

它遍历目录中的所有文件并重命名它们,从文件名中取出12-23个字符。当我通过bash使用我的服务器登录执行它时,该命令工作正常,但是当我通过python与web用户执行它时会抛出错误。

我发现这是因为Web用户的默认shell是/ bin / sh而不是/ bin / bash。

我可以使用该用户登录并将shell更改为/ bin / bash。

所以问题是我可以强制使用/ bin / bash执行单行程序而不更改用户的默认shell吗?

2 个答案:

答案 0 :(得分:2)

可能你可以称之为:

/bin/bash -c '$cmd'

其中$cmd是完整的命令行。

答案 1 :(得分:0)

from subprocess import Popen, PIPE, STDOUT

p = Popen(['/bin/bash','-'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
cmdout = p.communicate(input='uname -a\nuptime\nprintenv\n')[0]
print(cmdout)