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

Bash脚本不会在tempfile中输出任何数据,bash,shell,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 >&g

这是我使用的代码,我想从一个文件中的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

cat
zcat
到处都是无用的,你不能重定向到你正在阅读的同一个文件,这将得到一个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"

注意:不要将大写的
USER
用作变量run,否则您将覆盖shell为该变量提供的值。一般来说,不建议在脚本中使用所有大写变量。

您可以在一个命令中同时执行
grep
,与
zgrep
相同,并且您可能会弄乱stdout,因此无法获得多个打开,但这会使脚本更难阅读,我怀疑这会为您节省很多钱。还有一件事,这个问题想打印临时文件名,但是你打印了(
cat
)文件本身。谢谢你的建议。最后一个
echo
没有任何作用,因为这可以在
mktemp
命令之后立即执行。我假设OP希望看到最终输出,这就是为什么
cat
而不是
echo