Выполните другую команду перед выполнением команды, которую хочет запустить пользователь


9

Допустим, я хочу изменить исходное поведение lsинструмента следующим образом:

$ ls
Hello World
file1 file2 ...

Как я могу это сделать?

При запуске lsя хотел бы запустить другую команду, скажем echo "Hello World!".

Быстрое решение, которое я вижу, использует псевдоним:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

Тем не менее, это не реальное решение, так как, когда я буду работать, orig_lsон будет выводить "Hello World!".


Поместите другой ls в собственный путь пользователя и используйте его для подключения оригинала.
Петер - Восстановить Монику

Ответы:


12

Иногда псевдоним не достаточно мощный, чтобы легко делать то, что вы хотите, поэтому вот способ, не используя их.

В некоторый файл, который получен при запуске вашей оболочки (например, .bashrc), добавьте следующую функцию:

ls () {
    echo "Hello world!"
    command ls "$@"
}

В отличие от псевдонима, функция может возвращаться. Вот почему command lsиспользуется вместо ls; он говорит вашей оболочке использовать фактическую lsвместо функции, которую вы только что определили.


2
Верно. Это решение масштабируется лучше. +1
PythonNut

Какая commandальтернатива для OS X?
Ионика Бизэ

@ IonicăBizau Я понятия не имею command, не сработало: / Я понятия не имею, и у меня нет Mac, с которым можно проверить его, извините.
подземный

9

Вы не должны забывать звонить ls:

alias ls='echo "Hello World!"; ls'

Ха! Я предполагал, что это создаст бесконечный цикл! Но почему это не создает бесконечный цикл?
Ионикэ Бэзэу

1
Вместо этого вы можете попробовать alias ls 'echo "Hello World!"; / usr / bin / ls '
jamesqf

5
@ IonicăBizeve любое данное «правило расширения псевдонима» используется только один раз.
Дэвид Z

Будет ли объединение двух с & также работать? Это также гарантирует, что пользовательская команда будет запущена, только если пользовательская команда работает, верно?
Фонд Моника иск

@QPaysTaxes Вы можете использовать &действительно, но я не получаю аргумент, который вы приводите из этого.
Хауке Лагинг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.