Если я выполняю выполнение оболочки, оно работает, как предназначено, т.е. оно находит последний измененный файл и производит его использование cat
:
aux="$(find /home/w/Dropbox/notes/ -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" ")"; cat "${aux}"
Принимая во внимание, что, если я пытаюсь присвоить его псевдониму в .bashrc, это не работает (я не уверен в том, что это делает, это кажется как будто cat
команда используется, поскольку мне предлагают ввести текст). Это - псевдоним, точный copypaste между "":
alias readlast="aux="$(find /home/w/Dropbox/notes/ -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" ")"; cat "${aux}""
Обратите внимание, что это действительно работает при прямом присвоении через оболочку, но я хочу, чтобы это было постоянным псевдонимом.
Большое спасибо в течение Вашего времени.
Подсветка синтаксиса вопроса должна показать Вам, где Вы пошли не так, как надо: псевдоним запускается с двойной кавычки, и затем Вы используете другую двойную кавычку, закрывая оригинал, таким образом, замена команды (и "$ {aux}" позже) оценена, когда псевдоним создается, не, когда это выполняется. Таким образом, если Вы работаете alias readlast
, это было бы похоже:
alias readlast="aux=<name-of-file>; cat "
"${aux}"
конечно, пусто, потому что это не было установлено в то время, когда псевдоним был создан. Вот почему cat
ожидает входа - без имени файла, он просто реагирует на стандартный вход.
Вы могли зафиксировать его при помощи одинарных кавычек для всего определения псевдонима (и удаление одинарных кавычек из псевдонима):
alias readlast='aux="$(find /home/w/Dropbox/notes/ -type f -printf "%T@ %p\n" | sort -n | tail -1 | cut -f2- -d" ")"; cat "${aux}"'
Или использование функция:
readlast()
{
aux="$(find /home/w/Dropbox/notes/ -type f -printf '%T@ %p\n' |
sort -n |
tail -1 |
cut -f2- -d" ")"
cat "${aux}"
}
Как примечание стороны, можно упростить использование канала sed
:
readlast()
{
aux="$(find /home/w/Dropbox/notes/ -type f -printf '%T@ %p\0' |
sort -zrn |
sed -z 's/[0-9.]* //; q')"
cat "${aux}"
}
\0
в -printf
и -z
для sort
/sed
вводится разграниченный с символом ASCII NUL вместо новых строк. Это - единственный символ, не допустимый в пути, таким образом, это является самым безопасным для контакта с именами файлов и путями. С -r
, sort
инвертирует порядок на Вас, и sed
команда затем снимает изоляцию с метки времени и выходов после первой строки входа.