Ложноположительный в Bash состоянии - PullRequest
0 голосов
/ 30 марта 2020

Я пишу сценарий bash для проверки на нескольких серверах, установлен ли Tomcat 5. При запуске сценария, даже если команда поиска, хранящаяся в переменной command, ничего не возвращает, переменная tomcat по-прежнему имеет значение «1» в операторе if.

Я знаю, что с моим утверждением if должно быть что-то не так, но я не уверен, что именно. Ниже приведена функция, которая запускает команду на удаленном сервере

function search() {

        local login=$1
        local server_fqdn=$2

        local command="sudo find / -name \"tomcat-5*\""
        ssh -oBatchMode=yes -o ConnectTimeout=6 $login@$server_fqdn "$command"
        if [ "$?" = 0 ];
        then
                echo "Tomcat found"
                tomcat=1
        else
                echo "No tomcat here!"
        fi
}

Как мне получить функцию для ввода условия 'else', если command ничего не возвращает?

1 Ответ

0 голосов
/ 30 марта 2020

Непосредственная проблема: find возвращает 0, если не происходит сбой, независимо от того, обнаружил ли он что-либо или нет, вы можете предполагать поведение, подобное grep, но это не так. Вы можете захватить его вывод res=$(find ...) и проверить, не является ли он пустым (test -n), но ...

Но, честно говоря, это довольно странный способ обнаружить наличие установленного ПО, что является довольно ошибочной склонный. По меньшей мере, представьте, что вы оставили файл с примечаниями на потом: my_tomcat-5_hints.

Возможно, спросите вашего менеджера упаковки, используется ли он на хосте ... или хотя бы проверьте наличие спецификаций c file (s) / dir (s)?

Как правило, вам не нужно быть суперпользователем, чтобы говорить, и если вы это сделаете, это немного странно для ssh в качестве одного пользователя, просто для sudo на следующем шаге, если это действительно было необходимо.

...