在bash脚本中使用反引号来将python脚本调用为变量以前是可行的,但现在已失效

时间:2018-10-22 00:45:26

标签: python bash backticks

我有一个为游戏编写的简单脚本。该脚本从游戏用户主目录中的〜/ .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 :(得分:0)

这里有一些可能的错误源,这取决于您的错误消息是什么(如果您得到的是错误消息)。 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,看看是否可以确定问题所在在那里-两者之一可能发生不一致,导致未捕获的错误。

如果您可以提供有关程序如何“突然停止工作”的更多说明,那将很有用。

答案 1 :(得分:0)

我认为它仍然会在else语句中循环,因为有几行要比较,而且这样行也不行。另外,您的分配可能会一次加入一些行。

您可以通过以下方式替换if语句:

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

此带有-c选项的 grep 指令将以数学方式返回您执行 Read.py 返回的行数,并返回“ $ CARD”中的行数。因此,如果至少有一行匹配,则可以根据需要在 then 语句中循环。