, я пытаюсь получить типы файлов , используя псевдоним. Я использую:
alias file-types="find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u"
Однако это не работает:
Когда я набираю команду в терминале, она показывает (это именно то, что я хочу):
azw
azw3
bz2
chm
epub
pdf
но когда я использую псевдоним, он показывает что-то вроде :
./x.epub
./y.pdf
./z.pdf
.....
Что я могу сделать, чтобы сделать эту команду псевдонимом.
Это потому, что внешние двойные кавычки позволяют $1
быть оцененным оболочкой, когда псевдоним определен, так что print $1
становится обычным print
:
$ alias file-types="find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u"
$ alias file-types
alias file-types='find . -type f | perl -ne '\''print if m/\.([^.\/]+)$/'\'' | sort -u'
Вероятно, самый простой способ исправить цитирование - это сделать обратный слеш-эскейп $
:
print \$1 if m/\.([^.\/]+)$/
однако я бы рекомендовал использовать функцию оболочки вместо псевдонима в подобных случаях - см. например В Bash, когда использовать псевдоним, когда скрипт, а когда писать функцию?