Предотвращение открытия нового экземпляра программы при его вызове

Делать это правильно из ls неудобно, потому что формат даты меняется с возрастом файлов. Более того, вычисление для $ M подозрительно, поскольку ls обычно возвращает имя месяца, а не число. Предположительно OP использует команду date , чтобы попытаться обойти различия в формате даты ls , но это означает, что все файлы получат одно и то же значение в течение года.

Однако вопрос OP сосредоточен на ведущих нулях. Эта часть проста в awk :

D=$(ls -ltr $line | awk '{printf "%02d", $7}')
M=$(ls -ltr $line | awk '{printf "%02d", $6}')
Y=$(date +"%Y")

Если бы мне пришлось сделать это в HPUX, я бы посмотрел на использование Perl (который предустановлен), так как это поможет избежать проблем с ls и формат даты.

Вот краткий пример ( man perlfunc - с чего начать):

#!/usr/bin/perl -w

use strict;

for my $n ( 0 .. $#ARGV ) {
    my (
        $dev,  $ino,   $mode,  $nlink, $uid,     $gid, $rdev,
        $size, $atime, $mtime, $ctime, $blksize, $blocks
    ) = stat( $ARGV[$n] );
    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
      localtime($mtime);

    # printf "%s:", $ARGV[$n];
    printf "%04d%02d%02d", 1900 + $year, 1 + $mon, $mday;

    # printf "\n";
}
1;

Я проверил сценарий с двумя операторами printf без комментариев и просмотрел файлы примеров. Вы могли бы вызвать этот сценарий только с одним именем файла (для нескольких имен файлов отсутствие форматирования было бы неприятностью).

0
30.01.2014, 18:35
1 ответ

используйте pgrep для поиска таких процессов:

if pgrep fbi; then
    echo "already running"
else
    /usr/bin/fbi -T 1 -noverbose -a /etc/splash/splashscreen.png
fi

или, что проще,

pgrep fbi || /usr/bin/fbi -T 1 -noverbose -a /etc/splash/splashscreen.png

Вы можете использовать pkill -0 вместо pgrep

0
29.04.2021, 00:43

Теги

Похожие вопросы