Bash脚本不会在tempfile中输出任何数据

时间:2015-07-27 11:09:07

标签: bash shell

这是我使用的代码,我想从一个文件中的4个日志文件中收集数据,然后对其进行排序并打印临时文件名。

#!/bin/bash

TEMPFILE=$(mktemp)
USER=$1

# Check for input
#if [ -z $1 ]; then echo "Give me one username or mail address please..."

# Fill file with user history
cat /var/log/messages | grep $USER >> $TEMPFILE
cat /var/log/maillog | grep $USER >> $TEMPFILE
zcat /var/log/messages*gz | grep $USER >> $TEMPFILE
zcat /var/log/maillog*gz | grep $USER >> $TEMPFILE

# Sort by date
cat $TEMPFILE | sort -k1M -k2n -k3n > $TEMPFILE

echo $TEMPFILE

1 个答案:

答案 0 :(得分:0)

catzcat无处不在,您无法重定向到您正在阅读的同一个文件,这将为您提供一个0字节的文件。

试试这个:

#!/bin/bash

TEMPFILE=$(mktemp)
user="$1"

# Check for input
#if [ -z $1 ]; then echo "Give me one username or mail address please..."

# Fill file with user history
grep "$user" /var/log/messages >> $TEMPFILE
grep "$user" /var/log/maillog >> $TEMPFILE
zgrep "$user" /var/log/messages*gz >> $TEMPFILE
zgrep "$user" /var/log/maillog*gz >> $TEMPFILE

# Sort by date
sort -k1M -k2n -k3n "$TEMPFILE" > "$TEMPFILE.tmp"
mv "$TEMPFILE.tmp" "$TEMPFILE"

cat "$TEMPFILE"

PS:不要使用大写USER作为变量运行,否则你将覆盖shell为此变量提供值。通常,不建议在脚本中使用所有大写变量。