Обернуть команду в приглашение

Обернуть команду в приглашение

Можно ли вставить разделитель после команды в приглашении? Вот пример:

~/Desktop: ls -al
-------------------------------------
total 80
drwx------+  6 eddie  staff   204B Apr 29 16:57 .
drwxr-xr-x+ 54 eddie  staff   1.8K Apr 30 10:54 ..

~/Desktop:

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

решение1

В zsh можно определить функцию-хукpreexecдля вывода указанной строки перед выполнением каждой команды.

В bash вы можете использовать DEBUGловушку для настройки preexec-хука, который сделает то же самое.

Функцию preexec() можно определить примерно так:

preexec () { echo "-------------------------------"; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    preexec
}
trap 'preexec_invoke_exec' DEBUG

Более подробную информацию см. на сайтеЕсть ли в bash хук, который запускается перед выполнением команды?

Я не думаю, что это работает во всех версиях bash. На моем старом сервере Ubuntu, работающем под управлением bash 3.2.39(1), help trapнаписано

Если SIGNAL_SPEC имеет значение DEBUG, выполняется ARGпослекаждую простую команду.

На другом сервере, работающем под управлением bash 4.1.2(1), он говорит:

Если SIGNAL_SPEC имеет значение DEBUG, выполняется ARGдокаждую простую команду.

что нам и нужно. Поэтому убедитесь, что в вашей версии bash help trapнаписано "докаждую простую команду».

решение2

Если вы используете bash или ksh в качестве оболочки, вы можете создать функцию в одном из dotfile-файлов (.profile, .bash_profile и т. д.) следующим образом:

function hr {
    echo "--------------------------------------------------------------------------------"
}

Затем вы можете добавлять его к командам, когда вам нужен этот разделитель, используя &&или ;в качестве разделителей команд. Например:

bash-[534]$ hr && ls
--------------------------------------------------------------------------------
ddtool_23.jnlp  prtconf-pv

или

bash-[536]$ hr ; ls -la
--------------------------------------------------------------------------------
total 36K
drwxr-xr-x  2 tim staff    4 2012-12-06 15:02 ./
drwxr-xr-x 46 tim staff  134 2013-04-30 14:59 ../
-rw-------  1 tim staff 2.7K 2012-12-06 15:00 ddtool_23.jnlp
-rw-r--r--  1 tim staff  24K 2012-12-06 15:02 prtconf-pv

Я так и делаю. У меня есть вторая функция, которая также печатает более толстый разделитель.

function hr2 {
    echo "================================================================================"
}

Я часто использую эти функции в скриптах оболочки, чтобы обеспечить разделение различных частей скриптов, например, hr2между основными задачами и hrмежду элементами в операторе цикла. Это значительно упрощает чтение выходных данных скрипта.

Связанный контент