Использование обратных галочек в скрипте bash для вызова скрипта python в переменную ранее работало, но теперь не работает - PullRequest
0 голосов
/ 22 октября 2018

У меня есть простой сценарий, который я написал для игры.Этот скрипт вызывается из ~ / .profile в домашнем каталоге пользователя игры и должен имитировать поддельный логин, который запускает другой скрипт после успешного сравнения двух переменных.Это работало некоторое время, а затем внезапно перестало работать.(Правка: когда я имею в виду, что он перестал работать, я не имею в виду, что я что-то изменил, и он все испортил, я имею в виду, что он перестал работать после того, как не прикоснулся к нему в течение ночи.)

#!/bin/bash

pause(){
  read -p "Place [CARD] on scanner and press [ENTER] key..."
}

init(){
        cat /etc/issue
        pause
        READ=`sudo ~/bin/Read.py`
        CARD=`cat ~/var/keycode.txt`
        if [ "$READ" == "$CARD" ]; then
                ~/bin/mmenu.sh
        else
                echo "Incorrect... Please try again"
        fi
}

while true
do
        init
done

Что яделать неправильно?Заранее спасибо.

Редактировать: вывод Read.py равен 12345, а вывод cat keycode.txt - 12345, но, похоже, он не сможет их правильно сравнить.

Сценарий отключен, файл Read.py не печатается, просто записывает его содержимое в файл с именем rcard.txt, и обе переменные выглядят так:

CARD=`cat ~/var/kcard.txt`
READ=`cat ~/var/rcard.txt`

Попробуйте, как я мог,даже с ["$ READ" == "$ CARD"] все равно не выполняется оператор if.Даже с содержанием точно так же.Я действительно не понимаю.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Я думаю, что это все еще зацикливается в операторе else, потому что есть несколько строк для сравнения, и это не будет нормально, как это.Кроме того, ваше назначение может объединить несколько строк за один раз.

Вы можете заменить свое выражение if следующим образом:

if [ $( sudo ~/bin/Read.py |grep -wc "$CARD" ) -ge 1 ]; then

Эта инструкция grep с опцией -c, вернет количество строк в "$ CARD", которые возвращают ваше выполнение Read.py .Таким образом, если найдется хотя бы одна совпадающая строка, вы будете зацикливаться в операторе затем так, как хотите.

0 голосов
/ 22 октября 2018

Здесь есть несколько возможных источников ошибок, которые зависят от вашего сообщения об ошибке (если вы его получаете).Возможно, что sudo ~/bin/Read.py возвращает более одного слова текста, разделенного пробелами, что может привести к ошибке, подобной следующей:

$ foo=hello world
$ bash: world: command not found

Эта же ошибка также может возникать с cat ~/var/keycode.txt.Чтобы избежать этой потенциальной ошибки, даже если это не та ошибка, которую вы получаете, я бы заключил ваши кавычки в кавычки следующим образом:

    READ="`sudo ~/bin/Read.py`"
    CARD="`cat ~/var/keycode.txt`"

Если вы не получаете сообщение об ошибке, нокод не работает, когда у вас есть то, что должно быть правильным вводом, я бы проверил файлы ~/bin/Read.py и ~/var/keycode.txt и посмотрел, можете ли вы идентифицировать свою проблему там - несоответствие может произойти в одном из двух, что приведет к необработанной ошибке.

Если вы можете дать дополнительные разъяснения о том, как ваша программа «внезапно перестала работать», это было бы полезно.

...