Bash脚本不会在tempfile中输出任何数据
这是我使用的代码,我想从一个文件中的4个日志文件中收集数据,然后对其排序并打印临时文件名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
#!/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