Могу ли я передать расширение пути к команде? - PullRequest
0 голосов
/ 19 февраля 2020

Использование bash Я хочу выполнить sh, что делает следующая команда, не используя команду ls и вместо этого используя расширение чистого пути. Возможно ли это?

ls * | tail -1

Я ищу что-то вроде

* | tail -1

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вы можете передать расширенный список * в функцию и вывести последний аргумент:

f() { printf "%s\n" "${@: -1}"; }; f *
2 голосов
/ 19 февраля 2020

Да, вы можете использовать это, но * не делает то, что вы думаете. Он расширяется до списка содержимого каталога и пытается выполнить себя как двоичный файл. Это может быть опасно, когда содержимое вашего каталога содержит реальные исполняемые файлы, которые не предназначены для запуска.

Вы можете использовать встроенную оболочку, не разветвляя отдельный процесс, чтобы что-то сделать с результатом расширения пути. Например, используя printf()

printf '%s\n' * 

Посмотрите, что происходит, когда вы просто пытаетесь выполнить * в командной строке

mkdir -p foobar
cd foobar
touch zeezee
*
bash: zeezee: command not found

Вы можете tail результат этого вывода и фильтруйте результаты так, как вам удобно.

...