Псевдоним bash / zsh: могу ли я получить аргументы и использовать их в subshell?

919
tgm1024

Я хотел бы получить псевдоним, который дает список каталогов в порядке словаря с "." файлы в первую очередь. Кажется, что один из нескольких способов сделать это лишенным написания моего собственного скрипта (что не является реальной проблемой) - это установить локаль с помощью LC_ALL="C". (Это для справочной страницы по сортировке и нескольких других сайтов).

Однако установка языкового стандарта «C» может (и делает) привести к сбою некоторых программных установок. Поэтому мое краткосрочное решение сродни этому (для краткости это без дополнительных опций ls):

alias ls='(LC_ALL="C"; /bin/ls)'

Но это не позволяет «передавать» аргументы в подоболочку.

Это, конечно, не работает:

alias ls='(LC_ALL="C"; /bin/ls $*)'

Есть ли способ справиться с этим с помощью простого псевдонима? (В отличие от написания сценария / функции оболочки, что я могу сделать).

7

1 ответ на вопрос

10
mpy

Вам не нужна подоболочка. Вы можете изменить среду только для следующей команды, добавив в команду присвоение переменной без точки с запятой. Сравните, например, вывод

LC_ALL=C env | grep LC_ALL 

с выходом

env | grep LC_ALL 

Короче говоря, следующий псевдоним должен работать для вас:

alias ls='LC_ALL=C /bin/ls' 

Я использовал, /bin/lsкак в вашем примере, но, как указал Камиль Макиоровский в комментарии к другому ответу, введенная вами lsкоманда также может быть псевдонимом, поэтому, возможно, вам следует также рассмотреть эту альтернативу:

alias ls='LC_ALL=C ls' 
Священные Крипы! Вот что я получаю за то, что провожу так много времени в csh / tcsh. Я должен был прочитать документацию bash и zsh дюжину раз, искал это и не нашел его. Невероятный. Спасибо! tgm1024 5 лет назад 0
В качестве краткого упоминания об использовании `ls` вместо полностью определенной прямой ссылки на исполняемый файл / bin / ls. Это то, что я обычно советую людям делать в любом случае. В большинстве случаев я просто не хочу, чтобы кто-то еще делал то, что должна делать утилита. Он представляет собой открытый вопрос о том, что может пойти не так в будущем. Ссылка на `/ bin / ls` предназначена и то, что я предлагаю другим. tgm1024 5 лет назад 0

Похожие вопросы