Unix:Bash:Script 使用 head 命令后坐下
Unix:Bash:Script sits after using head command
我有一个脚本,当我不使用 head 命令时 运行 没问题,但是当我使用它和 运行 脚本时,脚本就像在等待一样用于插入命令。
我正在使用 head 尝试将文件的行数限制为 1000。
我试图限制的文件在下面的 ${LOG} 变量的路径中有描述。该文件是脚本结果所在的位置,该文件的命名基于您运行为脚本创建的目录和找到的OS。
例如:./test ex1
文件将被命名为 ex1-Linux-X.log.
我正在使用:
head -n1000 > filename
尝试限制输出行数。
这是我的一些脚本,用于显示我尝试在何处使用它。
STUID=
PATH=${PATH}\:.
TMPFILE=tempfile
GDIR=`pwd`
OSNAME=`uname -s`
LOG=${GDIR}/results/${STUID}-${OSNAME}-X.log
DATE=`date`
make -s clean
rm -f ${LOG}
touch ${LOG}
head -n1000 > filename
如果需要更多代码来完全理解正在发生的事情,请告诉我。
感谢任何帮助。
head 命令不应该用于限制行转到文件。
这里是 head 命令的手册。
HEAD(1) BSD General Commands Manual
HEAD(1)
NAME
head -- display first lines of a file
SYNOPSIS
head [-n count | -c bytes] [file ...]
DESCRIPTION
This filter displays the first count lines or bytes of each of the specified files, or of the standard input if no files are spec-
ified. If count is omitted it defaults to 10.
If more than a single file is specified, each file is preceded by a header consisting of the string ``==> XXX <=='' where ``XXX''
is the name of the file.
EXIT STATUS
The head utility exits 0 on success, and >0 if an error occurs.
SEE ALSO
tail(1)
HISTORY
The head command appeared in PWB UNIX.
BSD June 6, 1993
BSD (END)
head -n1000 > filename
表示从 STDIN 读取前一千行 并将它们输出到文件名。 head
将坐在那里等待您在程序中键入 1000 行输入。
如果您只想将文件截断到前 1000 行,head
可以做到,但您必须使用临时文件。
head -n1000 ${LOG} > ${LOG}.tmp
mv ${LOG}.tmp ${LOG}
如果您在一个步骤中尝试这样做,shell 重定向 (> ${LOG}
) 会在 head
读取之前截断日志文件。
对活跃使用的日志文件执行此操作不是一个好主意,事情可能正在写入它并且可能会继续尝试写入已删除的日志文件。相反,您将使用 truncate
在第 1000 行截断文件。truncate
以字节为单位工作,因此使用 head
和 wc
找出第 1000 行是什么字节上。
truncate --size=`head -n1000 ${LOG} | wc -c` ${LOG}
根据你的代码,我不确定你到底想要什么。您的代码删除并重新创建日志文件,然后在保证为空的日志文件上调用 head
。您想要一个 永远不会 超过 1000 行的文件吗?不能那样做,如果不弄乱命名管道或某种文件系统事件程序,你可能不想那样做。
您可能想要 FIFO queue, as new log entries are added, old ones get thrown out. Files are LIFO, like a stack 之类的东西,您要在末尾添加新的日志条目,并且还要从末尾删除它们。如果您将文件限制为 1000 行,您将丢弃 new 日志行。
接下来的问题是:1000 行很小。这是一个无关紧要的磁盘数量 space,也许是 80k?一个重大事件,您最想记录的事件,可以轻松 超过 1000 行日志记录。你可能想提高一点。
而是使用日志轮转器。该程序会定期将您的日志归档到每日、每小时、每周和每月的日志文件中。这样您的日志文件就会保持很小,更容易找到东西,您永远不会丢失日志信息,并且您可以定期备份和删除旧日志。这取决于您使用的系统,Debian has logrotate.
另一种选择是不自己编写日志,而是使用日志服务器,例如 syslog 或数据库。日志服务器可以管理日志文件的大小。对于 1000 行的日志文件,这可能有点矫枉过正。
我有一个脚本,当我不使用 head 命令时 运行 没问题,但是当我使用它和 运行 脚本时,脚本就像在等待一样用于插入命令。
我正在使用 head 尝试将文件的行数限制为 1000。
我试图限制的文件在下面的 ${LOG} 变量的路径中有描述。该文件是脚本结果所在的位置,该文件的命名基于您运行为脚本创建的目录和找到的OS。
例如:./test ex1
文件将被命名为 ex1-Linux-X.log.
我正在使用:
head -n1000 > filename
尝试限制输出行数。
这是我的一些脚本,用于显示我尝试在何处使用它。
STUID=
PATH=${PATH}\:.
TMPFILE=tempfile
GDIR=`pwd`
OSNAME=`uname -s`
LOG=${GDIR}/results/${STUID}-${OSNAME}-X.log
DATE=`date`
make -s clean
rm -f ${LOG}
touch ${LOG}
head -n1000 > filename
如果需要更多代码来完全理解正在发生的事情,请告诉我。
感谢任何帮助。
head 命令不应该用于限制行转到文件。
这里是 head 命令的手册。
HEAD(1) BSD General Commands Manual
HEAD(1)NAME head -- display first lines of a file
SYNOPSIS head [-n count | -c bytes] [file ...]
DESCRIPTION This filter displays the first count lines or bytes of each of the specified files, or of the standard input if no files are spec- ified. If count is omitted it defaults to 10.
If more than a single file is specified, each file is preceded by a header consisting of the string ``==> XXX <=='' where ``XXX'' is the name of the file.
EXIT STATUS The head utility exits 0 on success, and >0 if an error occurs.
SEE ALSO tail(1)
HISTORY The head command appeared in PWB UNIX.
BSD June 6, 1993
BSD (END)
head -n1000 > filename
表示从 STDIN 读取前一千行 并将它们输出到文件名。 head
将坐在那里等待您在程序中键入 1000 行输入。
如果您只想将文件截断到前 1000 行,head
可以做到,但您必须使用临时文件。
head -n1000 ${LOG} > ${LOG}.tmp
mv ${LOG}.tmp ${LOG}
如果您在一个步骤中尝试这样做,shell 重定向 (> ${LOG}
) 会在 head
读取之前截断日志文件。
对活跃使用的日志文件执行此操作不是一个好主意,事情可能正在写入它并且可能会继续尝试写入已删除的日志文件。相反,您将使用 truncate
在第 1000 行截断文件。truncate
以字节为单位工作,因此使用 head
和 wc
找出第 1000 行是什么字节上。
truncate --size=`head -n1000 ${LOG} | wc -c` ${LOG}
根据你的代码,我不确定你到底想要什么。您的代码删除并重新创建日志文件,然后在保证为空的日志文件上调用 head
。您想要一个 永远不会 超过 1000 行的文件吗?不能那样做,如果不弄乱命名管道或某种文件系统事件程序,你可能不想那样做。
您可能想要 FIFO queue, as new log entries are added, old ones get thrown out. Files are LIFO, like a stack 之类的东西,您要在末尾添加新的日志条目,并且还要从末尾删除它们。如果您将文件限制为 1000 行,您将丢弃 new 日志行。
接下来的问题是:1000 行很小。这是一个无关紧要的磁盘数量 space,也许是 80k?一个重大事件,您最想记录的事件,可以轻松 超过 1000 行日志记录。你可能想提高一点。
而是使用日志轮转器。该程序会定期将您的日志归档到每日、每小时、每周和每月的日志文件中。这样您的日志文件就会保持很小,更容易找到东西,您永远不会丢失日志信息,并且您可以定期备份和删除旧日志。这取决于您使用的系统,Debian has logrotate.
另一种选择是不自己编写日志,而是使用日志服务器,例如 syslog 或数据库。日志服务器可以管理日志文件的大小。对于 1000 行的日志文件,这可能有点矫枉过正。