/ bin / sh: 1: [: отсутствует] - PullRequest
0 голосов
/ 03 марта 2019

Я делаю скрипт на 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 голосов
/ 03 марта 2019

Проблема в вашем отступе и в пустой строке между печатью и др.

Примите во внимание это:

Вкладки заменены (слева направо) на однудо восьми пробелов, так что общее количество символов до замены, включая замену, кратно восьми (предполагается, что это то же правило, что и в 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

0 голосов
/ 03 марта 2019

Похоже, что ваша оболочка по умолчанию sh, у которой нет тестовой утилиты , поэтому попробуйте указать 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

Или вы можете использовать двойные скобки для оператора if-else в bash:

if [[ some expression ]]
then
    some code
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...