Подробное описание настройки приложений по умолчанию можно найти здесь в соответствующей вики-статье Arch.
Для вашего конкретного случая вы редактируете ~/.config/mimeapps.list
и добавляете новую строку с inode/directory=nautilus.desktop
в секцию [Default Applications]
.
Файл должен выглядеть следующим образом:
[Default Applications]
text/plain=SciTE.desktop
text/x-tex=texmaker.desktop
inode/directory=nautilus.desktop
Вы можете использовать date +%s
, чтобы получить формат даты, который вы можете легко вычислить по (числу секунд [с оговорками] с 1 января 1970 года 00 :00 :00Z ). Вы также можете преобразовать дату формата ISO -назад (, возможно, неправильно, из-за таких проблем, как переход на летнее время ), используя date -d "$start" +%s
. Это не идеально не только из-за проблем с летним временем при обратном преобразовании, но и если кто-то изменит время во время работы вашей программы или если что-то вроде ntp, то вы получите неправильный ответ. Возможно, очень неправильный.
Дополнительная секунда даст вам несколько неверный ответ (с отклонением на секунду ).
К сожалению, проверка исходного кода времени показала, что time
страдает от тех же проблем с использованием настенных -часов (вместо "монотонного" времени ). К счастью, Perl доступен почти везде и может обращаться к монотонным таймерам :
start=$(perl -MTime::HiRes=clock_gettime,CLOCK_MONOTONIC -E 'say clock_gettime(CLOCK_MONOTONIC)')
Это будет количество секунд, прошедших с произвольной точки в прошлом (в Linux с момента загрузки, исключая время приостановки работы машины ). Он будет считать секунды, даже если часы переведены. Поскольку работать с действительными числами (не -целыми числами )в оболочке довольно сложно, вы можете сделать все это на Perl:
#!/usr/bin/perl
use warnings qw(all);
use strict;
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
my $cmd = $ARGV[0];
my $start = clock_gettime(CLOCK_MONOTONIC);
system $cmd @ARGV; # this syntax avoids passing it to "sh -c"
my $exit_code = $?;
my $end = clock_gettime(CLOCK_MONOTONIC);
printf STDERR "%f\n", $end - $start;
exit($exit_code ? 127 : 0);
Я назвал это "монотонным -временем"; и используется точно так же, как «время» (без каких-либо собственных аргументов ). Так:
$ monotonic-time sleep 5
5.001831 # appeared ≈5s later
$ monotonic-time fortune -s
Good news is just life's way of keeping you off balance.
0.017800
В Bash вы также можете использовать волшебную переменнуюSECONDS
:
SECONDS
Each time this parameter is referenced, the number of seconds since shell invocation is returned.
так:
bash -c 'a=$SECONDS; sleep 5; b=$SECONDS; printf "%d seconds passed\n" "$((b-a))"'
выводит 5 seconds passed
.
SECONDS
имеет только полную -вторую степень детализации, но date +"... %S"
тоже. С датой GNU вы можете использовать %N
с %s
, чтобы получить время в наносекундах.
a=$(date +%s%N)
sleep 1.234
b=$(date +%s%N)
diff=$((b-a))
printf "%s.%s seconds passed\n" "${diff:0: -9}" "${diff: -9:3}"
отпечатки:
1.237 seconds passed
Bash не может выполнять арифметические действия с числами с плавающей запятой, поэтому вам нужно либо использовать внешнюю утилиту для выполнения вычислений, либо выполнять вычисления в единицах меньше секунды, как я сделал выше. (Числа не помещаются в 32-битную систему, поэтому это может не работать в 32-битной -системе. Я не уверен, что Bash использует 64 бита для арифметики даже в 32 -битных системах.)
SECONDS
также ведет себя неправильно, если системное время изменяется в течение периода измерения, но на самом деле вы должны установить время только один раз во время запуска, а затем позволить NTP отрегулировать часы, чтобы оставаться во времени.