Подстановочный знак оболочки должен распространяться на все, даже на этот. Таким образом, вы можете сделать это, удалив остальное содержимое и cd *
, или используя более сложный цикл для проверки существующего. Я не уверен, что именно, но x = $ (ls | tail -n1) && cd "$ x"
может сработать. Это не может быть пустая строка, потому что это не разрешено файловой системой.
В любом случае, вы должны как можно скорее переименовать эту штуку во что-нибудь нормальное. Попробуйте ls | hexdump
, чтобы увидеть, что именно это за штука (это может быть любой непечатаемый символ или даже что-то в Юникоде, которое ваш терминал не может отобразить).
Этот код perl
даст вам подсчитанный хвост
#!/usr/bin/perl
#
# Usage tailmax.pl <filename> [<num_lines>]
#
use strict;
use warnings;
use File::Tail;
my $logfile = shift @ARGV;
my $pattern = shift @ARGV || '';
my $count = shift @ARGV || -1;
my $fh = File::Tail->new(name => $logfile, tail => 0, interval => 0, maxinterval => 2) or
die "Cannot open $logfile: $!\n";
while ($count != 0 and defined (my $line = $fh->read)) {
if ($pattern eq '' or $line =~ /$pattern/) {
print "$line";
$count-- if $count > 0;
}
}
, если вы сохраните его в файл, например / usr / local / bin / tailmax
и сделать его исполняемым, вы можете вызвать его так, что даст вам следующие 100 сообщений из файла журнала / var / log / messages
, которые содержат RE somepattern
. (Для чтения этого файла может потребоваться root
.)
tailmax /var/log/messages 'somepattern' 100
roaima правильно указывает вам на команду timeout
, а head
фактически завершается после того, как прочитает желаемое количество строк, поэтому я надеюсь, что с
timeout 600s tail -f ‹logfile› | ‹filter› | head -n 1000
вы бы попасть.
По умолчанию тайм-аут завершает процесс и канал прерывается.
timeout --foreground 600s tail -n 0 -f logfile | ...filter | head -n 1000| ...
timeout --foreground
в противном случае мы увидели бы просто «Завершено» tail -n 0 -f
, чтобы показать только новые логи head -n 1000
, чтобы «остановить после 1000 строк "\ спасибо {roaima and Ulrich Schwarz}
Пробовал с помощью приведенной ниже команды, все сработало
tail -f /var/log/file.log & read -t 600; kill $!
Это запустит tail -f
для файла в фоновом режиме, а затем использует read
с тайм-аутом, установленным на 10 минут. Когда read
возвращается, либо из-за того, что пользователь нажал Enter , либо из-за тайм-аута, фоновое задание tail -f
прекращается.