Как другие сказали, что псевдоним является Вашим другом. Для немного более сложных вещей (когда Вам нужны споры где-нибудь между инструкцией) я использую функции в своем .zshrc, как:
function ff() { find . -iname "*$**" }
это работает как, располагаются (я использую его, когда по некоторым причинам дб не доступен). Или
function chuck() { ps aux | grep $1 | tr -s '\t' ' ' | cut -f2 -d' ' | xargs kill $2 }
для замены killall.
xtrace
вывод переходит к stderr, таким образом, Вы могли перенаправить stderr
кому: /dev/null
:
i_know_what_this_does() {
echo do stuff
} 2> /dev/null
Если Вы все еще хотите видеть ошибки от команд, выполненных в функциях, Вы могли сделать
i_know_what_this_does() (
{ set +x; } 2> /dev/null # silently disable xtrace
echo do stuff
)
Отметьте использование (...)
вместо {...}
обеспечить локальный объем для той функции через подоболочку. bash
, так как версия 4.4 теперь поддерживает local -
как в Almquist окружают для создания опций локальными для функции (подобный set -o localoptions
в zsh
), таким образом, Вы могли избежать подоболочки путем выполнения:
i_know_what_this_does() {
{ local -; set +x; } 2> /dev/null # silently disable xtrace
echo do stuff
}
Альтернатива для bash
4.0 к 4,3 должен был бы использовать $BASH_XTRACEFD
переменная и имеет специализированный дескриптор файла, открытый на /dev/null
для этого:
exec 9> /dev/null
set -x
i_know_what_this_does() {
{ local BASH_XTRACEFD=9; } 2> /dev/null # silently disable xtrace
echo do stuff
}
С тех пор bash
испытывает недостаток в способности отметить fd с флагом замыкаться-должностного-лица, который имеет побочный эффект утечки этого fd к другим командам все же.
См. также этот locvar.sh, который содержит несколько функций для реализации локального объема для переменных и функций в сценариях POSIX и также обеспечивает trace_fn
и untrace_fn
функции для создания их xtraced или нет.
Причина это set +x
печатается это set -x
означает, "печатают команду, которую Вы собираетесь выполнить, с расширениями, прежде, чем выполнить его. Таким образом, оболочка не знает, что Вы хотите, чтобы она не распечатала вещи, пока она не распечатала строку, говоря этому не распечатать вещи. Насколько я знаю нет никакого способа мешать этому произойти.
Вот решение, которое вы искали:
function xtrace() {
# Print the line as if xtrace was turned on, using perl to filter out
# the extra colon character and the following "set +x" line.
(
set -x
# Colon is a no-op in bash, so nothing will execute.
: "$@"
set +x
) 2>&1 | perl -ne 's/^[+] :/+/ and print' 1>&2
# Execute the original line unmolested
"$@"
}
Исходная команда выполняется в той же оболочке при преобразовании идентичности. Непосредственно перед запуском вы получаете нерекурсивный xtrace аргументов. Это позволяет вам отслеживать нужные вам команды, не рассылая stederr дубликатами каждой команды "echo".
# Example
echo "About to do something complicated ..."
xtrace do_something_complicated