0

所以我很难弄清楚这一点。

我想做的是显示最近输入的命令

让我们以此为例:

MD5=$(cat $DICT | head -1 | tail -1 | md5sum)

该命令刚刚执行。它包含在一个 shell 脚本中。执行后,在 if..then..else.. 语句中检查输出。如果满足条件,我希望它运行上面的命令,除了我希望它每次运行时都加一。例如:

MD5=$(cat $DICT | head -1 | tail -1 | md5sum)

if test ! $MD5=$HASH  #$HASH is a user defined MD5Hash, it is checking if $MD5 does NOT equal the user's $HASH
  then  #one liner to display the history, to display the most recent
    "MD5=$(cat $DICT | head -1 | tail -1 | md5sum)" #pipe it to remove the column count, then increment the "head -1" to "head -2"
  else echo "The hash is the same."
fi  #I also need this if..then..else statement to run, until the "else" condition is met.

谁能帮忙,谢谢。我脑袋放屁。我正在考虑使用 sed 或 awk 来增加。grep 显示最新的命令,

所以说:

$ history 3

会输出:

1 MD5=$(cat $DICT | head -1 | tail -1 | md5sum)
2 test ! $MD5=$HASH 
3 history 3

-

$ history 3 | grep MD5

会输出:

1 MD5=$(cat $DICT | head -1 | tail -1 | md5sum)

现在我希望它删除 1,并将 1 添加到 head 的值,然后重新运行该命令。并通过 if..then..else 测试将该命令发回。

4

1 回答 1

1

更新

如果我很好地理解了您的问题,这可能是一个解决方案:

# Setup test environment
DICT=infile
cat >"$DICT" <<XXX
Kraftwerk
King Crimson
Solaris
After Cyring
XXX

HASH=$(md5sum <<<"After Cyring")

# Process input file and look for match
while read line; do
  md5=$(md5sum<<<"$line")
  ((++count))
  [ "$HASH" == "$md5" ] && echo "The hash is the same. ($count)" && break
done <$DICT

输出:

The hash is the same. (4)

我稍微改进了脚本。它多备一个clone(2),并pipe(2)使用md5sum<<<word符号而不是echo word|md5sum.

首先,它设置了测试环境创建infile和 HASH。然后它读取输入文件的每一行,创建 MD5 校验和并检查是否与HASH. stdout如果是这样,它会break向循环写入一些消息。

恕我直言,最初的问题有点想多了。

于 2013-06-04T22:26:10.940 回答