Трубные команды в функции bash - PullRequest
0 голосов
/ 15 ноября 2011

Когда вы определяете функцию bash, вы можете вызывать команды bash с помощью команды command.

function ls() {
  clear
  command ls "$@"
}

Как бы вы передали команды в функцию bash?

, например

function ls() {
  clear
  command ls "$@" | head
}

РЕДАКТИРОВАТЬ: выход будет в порядке, но есть --color=auto. Смотрите здесь

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Попробуйте это в вашем ~/.bashrc

function ls() { clear ; builtin ls "$@" | head ; }

Это похоже на функцию, которую вы уже используете, но с включением builtin, это гарантирует, что вы не застрянете в цикле, вызывающем себя.Надеюсь, что это работает!

РЕДАКТИРОВАТЬ: Следует отметить, что любая информация о цвете, полученная с помощью ls с опцией --color=auto, не будет передаваться через трубу к головке.

1 голос
/ 15 ноября 2011

Вы можете передать информацию о цвете, сгенерированную командой ls, на head, если вы запускаете ls в так называемом псевдотерминале (так что ls считает, что записывает свой вывод на терминал, не труба). Это может быть достигнуто с помощью команды script.

ls() {
   type -P command 1>/dev/null || 
        { echo 'No "command" executable found!'; return 1; }
   clear
   script -q /dev/null command ls -G "$@" | tr -d '\r' | head
 }


 cat /usr/bin/command   # on Mac OS X 10.6.8
 #!/bin/sh
 # $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2 2005/10/24 22:32:19 cperciva Exp $
 # This file is in the public domain.
 builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}

Подробнее см .: Команда ls работает по-разному в зависимости от получателя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...