man utmp
:
utmp файл позволяет обнаруживать информацию о том, кто в настоящее время использует систему. Может быть больше пользователей, в настоящее время использующих систему, потому что не все программы используют вход utmp.
Так, это должно быть это sshd
не добавляет utmp запись при обработке scp
соединения. Выглядит довольно нормальным потому что scp
экземпляры не являются интерактивными сессиями.
Возможно, что-то может быть сделано с помощью ForceCommand
или Subsystem
в sshd_config
: Могло бы быть возможно перенести выполнение sftp
обработчик в оболочке входа в систему.
(На самом деле я не рекомендовал бы, чтобы, лучше сохраните это простым и используйте стандартные средства входа.)
evince "$(ls -t | head -n1)"
В то время как это обработает пробелы, вкладки, и (я верю), печать экстренного сообщения, это повредится, если имя файла будет содержать новую строку, и возможно на некоторых других непечатаемых символах.
Это - более корректный и устойчивый подход, чем ls -t
, за счет некоторой дополнительной сложности.
Добавьте короткий сценарий оболочки (код ниже) к Вашему $PATH
. ~/bin
хорошее место для него.
Не забудьте удостоверяться
chmod +x ~/bin/script_name
~/bin
находится в Вашем $PATH
Передайте команду, в которой Вы хотите работать на новейшем файле ~/Download
кому: last_download
.
Принятие Вас назвало сценарий last_download
last_download
(никакие аргументы): выполнения evince
, команда по умолчанию, на новейшем файле в ~/Downloads
last_download mplayer
: выполнения mplayer
на новейшем файле в ~/Downloads
last_download cp -t ~/Desktop
: копирует новейший файл в ~/Downloads
кому: ~/Desktop
#!/bin/sh
# Usage: last_download [cmd [options]...]
newest=
dir=~/Downloads
# default command
if [ $# -eq 0 ]; then
set -- evince;
fi
# find newest file
for f in "$dir"/*; do
if [ -z "$newest" ] || [ "$f" -nt "$newest" ]; then
newest="$f"
fi
done
if ! [ -e "$newest" ]; then
exit 1
fi
# run command on newest file
"$@" "$newest"
Примечание: Сценарий только заглядывает ~/Download
но не было бы трудно обобщить его для поддержки любого каталога, в этом случае смена имени будет также гарантирована.
exec zsh
evince ~/Downloads/*.pdf(om[1])
или если Вы не хотите переключаться на zsh
cd ~/Downloads
zsh -c 'evince ./*.pdf(om[1])'
Биты между круглыми скобками являются спецификаторами шарика. om
изменяет порядок на шарики для использования времени изменения, а не имени (новейший первый). [1]
средства использовать только первое соответствие.
Для получения дополнительной информации см. этот ответ на, "Как я фильтрую шарик в zsh".
Можно использовать измененный find_date_sorted:
last_download() {
while IFS= read -r -d '' -u 9
do
cut -d ' ' -f 3- <<< "$REPLY"
break
done 9< <(find ~/Downloads -maxdepth 1 -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\0' | sort -rz)
}
Это будет работать с любыми именами файлов. Открыть файл:
evince "$(last_download)"
Нет, и даже если бы было, то Вы не могли бы быть уверены, что некоторый системный журнал обычно не будет последний раз обновленным файлом.
Ответ Kevin (он победил меня к нему), работы, если Вы просто не хотите вручную открываться ~/Downloads
.