Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
Иван Шихалев
Сообщения: 167
Статус: принципиальный дилетант
ОС: Gentoo Linux

Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

Сообщение Иван Шихалев »

Т.е. чтобы, например, если я нахожусь внутри git-репозитория, то команды git работали бы как-бы напрямую. А вот если снаружи, то алиасы отключаются и вызываются соответствующие shell-команды, если есть.

Попытки засунуть соответствующие строки 'alias=...' в скрипт, вызываемый через 'PROMPT_COMMAND' или '\$(...)' в 'PS1' ничего не дали — ни алиасы, ни переменные в этом случае не пробрасываются в интерактивный шелл...
Иван Шихалев
shikhalev.org
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19370
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

Сообщение Bizdelnick »

Такой вариант не пойдёт?
alias status='$(if [ -d .git ]; then echo git status; else echo status; fi)'
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Иван Шихалев
Сообщения: 167
Статус: принципиальный дилетант
ОС: Gentoo Linux

Re: Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

Сообщение Иван Шихалев »

Bizdelnick писал:
17.10.2019 00:52
Такой вариант не пойдёт?
Т.е. все алиасы будут висеть всегда, хоть и работать в зависимости от данных? Не хотелось бы — кроме гита есть еще пачка вещей, к которым хотелось бы привязаться (cargo, cmake и т.д.).
Иван Шихалев
shikhalev.org
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5159
ОС: Gentoo

Re: Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

Сообщение /dev/random »

Если функции вместо алиасов устроят, то можно так:

Код: Выделить всё

command_not_found_handle() {
	local hash="$(md5sum <<< "$PWD")"
	local hashes="${hash:0:10}"
	[[ -d .git ]] && hashes="$hashes _git"
	local cmd="$1"
	shift
	for hash in $hashes
	do
		if [[ "$(type -t "${cmd}_${hash}" 2>/dev/null)" == 'function' ]]
		then
			"${cmd}_${hash}" "$@"
			return
		fi
	done
	printf 'Command not found: %s\n' "$cmd" >&2
	for hash in $hashes
	do
		printf 'Function not found: %s\n' "${cmd}_${hash}" >&2
	done
	false
}

Shell

$ cd /tmp
$ e
Command not found: e
Function not found: e_097306edbb
$ e_097306edbb() { echo hello; }
$ e
hello
$ cd /var/tmp
$ e
Command not found: e
Function not found: e_16db395249
$ mkdir repo
$ cd repo
$ git init
Инициализирован пустой репозиторий Git в /var/tmp/repo/.git/
$ e
Command not found: e
Function not found: e_b9504c3d66
Function not found: e__git
Спасибо сказали:
Аватара пользователя
Иван Шихалев
Сообщения: 167
Статус: принципиальный дилетант
ОС: Gentoo Linux

Re: Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

Сообщение Иван Шихалев »

Не знал про

Shell

command_not_found_handle
Спасибо, весьма вероятно, что где-то тут решение.
Иван Шихалев
shikhalev.org
Спасибо сказали:
Аватара пользователя
Иван Шихалев
Сообщения: 167
Статус: принципиальный дилетант
ОС: Gentoo Linux

Re: Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

Сообщение Иван Шихалев »

Дошли руки начать реализовывать свои хотелки — https://github.com/shikhalev/xbash.

Пока работает, как задумано, для git, остальное в планах.
Дельные замечания приветствуются.
Иван Шихалев
shikhalev.org
Спасибо сказали:
Аватара пользователя
Иван Шихалев
Сообщения: 167
Статус: принципиальный дилетант
ОС: Gentoo Linux

Re: Хочется странного: включать/выключать алиасы в зависимости от текущего каталога

Сообщение Иван Шихалев »

Добавил команды для cargo и написал более-менее README.
Иван Шихалев
shikhalev.org
Спасибо сказали: