/ bin / sh:1:[:缺少]

时间:2019-03-02 22:42:46

标签: python linux

我正在制作一个python脚本,该脚本将自动检查计算机上是否安装了nmap,然后继续运行nmap。我遇到的一个问题是,它在运行时会与/bin/sh: 1: [: missing ]一起返回,我还想知道如何将终端的输出通过管道返回到我的程序中。假设我运行hostname -I,如何在我的脚本中复制输出并为其分配变量名称。感谢下面的代码

import os
import subprocess
def isInstalled(name):
    cmd = """ if ! [ -x "$#(command -v """ + name + """)" ]; then
      echo '0'
      exit 0
    fi"""
    ret = subprocess.check_output(cmd, shell=True).strip()
    if ret == b'0':
        return False
    return True

if isInstalled('nmap'):
print("Nmap is installed")

else:
    print("nmap is uninstalled since quite mode is active auto install will")

2 个答案:

答案 0 :(得分:0)

看起来您的默认shell是sh,没有可用的test utility,因此请尝试在要编写的脚本中指定bash shebang #!/bin/bash

def isInstalled(name):
    cmd = """#!/bin/bash
    if ! [ -x "$#(command -v """ + name + """)" ]; then
      echo '0'
      exit 0
    fi"""
    ret = subprocess.check_output(cmd, shell=True).strip()
    if ret == b'0':
        return False
    return True

或者您可以将double brackets用于bash中的if-else语句:

if [[ some expression ]]
then
    some code
fi

答案 1 :(得分:0)

您的缩进以及print和else之间的空白行存在问题。

考虑到这一点:

  

标签由一到八个空格(从左到右)替换,例如   包括(包括)在内的字符总数   替换是8的倍数(这应该是相同的   Unix使用的规则)。第一个之前的空格总数   然后使用非空白字符确定行的缩进。   缩进不能使用以下方式划分为多条物理线   反斜线;直到第一个反斜杠的空格决定了   压痕。

将代码更改为此:

if isInstalled('nmap'):
    print("Nmap is installed")
else:
    print("nmap is uninstalled since quite mode is active auto install will")

关于第二个问题,请看以下答案:https://stackoverflow.com/a/6657718/3589567