Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

[TIP]automatische Eingabevervollständigung in bash erweitern

Alles rund um die Installation Eures Linuxsystems, sowie die Updatefunktionen des Systems und das Paketmanagement

Moderator: Moderatoren

Antworten
Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

[TIP]automatische Eingabevervollständigung in bash erweitern

Beitrag von oc2pus » 12. Sep 2005, 12:42

Seit Version 2.04 verfügt die Bourne Again Shell (bash) über die Möglichkeit, die automatische Eingabe-Vervollständigung durch eigene Definitionen zu erweitern. Ein Tool, das hiervon intensiv Gebrauch macht, ist bash-completion.

Die SuSE Nutzer können das noarch.rpm passend zu ihrer bash Version installieren
rpm -q bash ==> welche bash Version ist im Einsatz
Dieses tolle Tool ist zu finden unter:
http://www.caliban.org/bash/index.shtml#completion.
Bei Debian ist es bereits in das bash-Paket integriert, muß aber manuell aktiviert werden.

Damit die Erweiterungen aktiviert werden für jeden User ist die Datei $HOME/.bashrc zu editieren und um die folgende Zeile zu erweitern:

Code: Alles auswählen

 # bash-completion
[ -z "$BASH_COMPLETION" ] && declare -r BASH_COMPLETION=/etc/bash_completion
Damit ist ab dem nächsten shell-Neustart die Erweiterung aktiviert.

Es gehen dann so tolle Sachen wie:
apt-get <tab><tab> und es werden alle apt-get Optionen angezeigt
weitere Infos:
http://www.pl-berichte.de/t_system/bash-completion.html

Vielleicht hat ja jemand Lust das für das apt-Wrapper Script zu erweitern ?
Dazu müsste die Datei /etc/bash_completion erweitert/editiert werden.

Und in /usr/share/doc/packages/bash-completion/contrib/ befinden sich weitere Dateien für andere gängige Programme (bittorrent, subversion, bitkeeper, ...)
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Werbung:
SoeDib
Member
Member
Beiträge: 103
Registriert: 3. Jun 2004, 18:18

Beitrag von SoeDib » 17. Mär 2006, 22:03

Kleiner Tip zu bash-completion:
Wer, wie auch in den FAQ beschrieben, das folgende kleine Skript nach z.B. /etc/cron.daily/updaterpmdb stellt, kann in Zukunft RPM-Namen erheblich schneller über <Tab> vervollständigen:

Code: Alles auswählen

#!/bin/sh
rpm -qa --qf '%{name}-%{version}-%{release}.%{arch}.rpm\n' 2>&1 | sort > /var/log/rpmpkgs
(Ausführbar machen nicht vergessen.)

Dies funktioniert genau dann, wenn /var/log/rpmpkgs nach der letzten Änderung an der RPM-Datenbank erstellt wurde; d.h. also, dass /etc/bash_completion nach der Installation oder Entfernung eines RPMs wieder solange die langsame Methode zur Ermittlung von RPM-Namen verwendet, wie /var/log/rpmpkgs nicht neu erstellt wird.

(Teilweise) Abhilfe schaffen diese beiden Code-Schnipsel:
Als /etc/apt/apt.conf.d/updaterpmdb.conf:

Code: Alles auswählen

Scripts::PM::Post:: "updaterpmdb.lua";
Scripts::Options::RunPostScript "true";
User::Post "/etc/cron.daily/updaterpmdb";
und als /usr/share/apt/scripts/updaterpmdb.lua:

Code: Alles auswählen

if transaction_success == false then
	return
end

if confexists("Scripts::Options::ShowRpmCmd") and
  confget("Scripts::Options::ShowRpmCmd/b") == "true" then
	return
end

if not confexists("Scripts::Options::RunPostScript") or
  confget("Scripts::Options::RunPostScript/b") == "false" then
	return
end

if confexists("User::Post") then
	UPS = confget("User::Post")
	-- don't log when in --test mode
	configs = { "RPM::Options", "RPM::Install-Options", "RPM::Erase-Options" }
	for i, conf in ipairs(configs) do
		rpmopts = confgetlist(conf, "")
		for j, opt in ipairs(rpmopts) do
			if string.find(opt, "test") then
				print( "apt running in test mode: "..UPS.." would now be executed")
				return
			end
		end
	end
	print("apt executing: "..UPS)
	os.execute( UPS )
end
Dies veranlasst apt, nach jedem install, remove, upgrade, usw. das Skript zur Aktualisierung der RPM-Namen aufzurufen, so daß /var/log/rpmpkgs immer "neu genug" ist, auch nachdem etwas mit apt (de-)installiert wurde. Soll die schnelle RPM-Namenskomplettierung aber auch nach Gebrauch von "rpm" zur De-/Installation erhalten bleiben, muss das Cron-Skript einmal von Hand aufgerufen werden.

Grüße,
SoeDib
SuSE 10.0 & WinXPproSP1, 1,3GHz Duron, 512MB RAM
Opera op Platt - deegten Kraam. ;)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste