История и дубликаты
Чтобы, во время листания истории введённых команд (стрелками на клавиатуре), терминал не предлагал вам одни и те же строки-дубликаты добавьте к .bashrc
это:
export HISTCONTROL=ignoreboth:erasedups
Autocomplete
Если у вас имеется некий большой скрипт, и вы всё никак не можете уложить в голове все его многочисленные параметры, то можно создать свой собственный autocomplete-список
для этого скрипта/программы. Сами скрипты обычно кладутся в ~/.bash_completion.d
, но это зависит от настроек вашей системы и профиля. Можно сделать, к примеру так (.bashrc
):
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. your_script's_path
fi
Где вместо your_script’s_path
путь к вашему скрипту. В самом скрипте уже может быть всё что угодно. Самый простой вариант с заранее заготовленными строками для автокомплита (бездумного):
complete -W "option1 option2 option3" your_program
Это приведёт к тому, что вбив "your_program "
и нажав Tab
дважды вам будут предложены все три опции. Если же нужно что-то хитрее, например специфическую фильтрацию, то можно указать отдельный метод, для обработки уже введённых символов. Или, скажем, вам может потрбоваться в качестве списка вариантов список директорий/файлов в каком-то конкретно заданном месте.
_your_program()
{
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W " $( ls some_directory's_path )" -- $cur) )
}
complete -F _your_program your_program
Этот код позволит по Tab
-у получать в помощь список файлов из some_directory’s_path
.
#!/bin/sh
Столкнулся с тем, что указывая вначале bash-скриптов этот интерпретатор, часть правильно записанных bash-команд не срабатывает, а ругается с ошибками. Оказалось всё дело в том, что в Ubuntu-based
дистрибутивах в качестве sh-интерпретатора
используется некий dash
, и он не в полной мере совместим с bash
. Поменяв sh
на bash
в этой строке проблемы испарились.
В моём случае dash
ругался на:
DIR=$(dirname "$(readlink -f "$0")")
Эта строка, кстати, аналог получения __dirname
.