BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Wort in der tcsh löschen

In der tcsh kann ein Wort links des Cursors mit Ctrl + w gelöscht werden. Befindet sich der Cursor innerhalb eines Wortes, so wird alles links des Cursors bis zum Wortanfang gelöscht.

Related Entries:
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
Vervollständigung in der tcsh
 Permalink

Programm mit which finden

Möchte man herausfinden ob sich ein Programm innerhalb eines Verzeichnisses befindet, welches in der PATH-Variable gesetzt ist, so kann dazu which verwendet werden:

# which portmaster
/usr/local/sbin/portmaster
# which bla
bla: Command not found.

Benutzer der csh verwenden dabei eine in der Shell eingebaute Version von which. Verwendet man eine Shell welche which nicht beinhaltet, so kann /usr/bin/which aus dem FreeBSD-Basissystem verwendet werden:

# which which
which: shell built-in command.
# /usr/bin/which which
/usr/bin/which

Zusätzlich zu which kann in der csh auch where verwendet werden, welches den Shell-eigenen und den im Dateisystem gefundenen Befehl anzeigt, sollten beide vorhanden sein:

# where which
which is a shell built-in
/usr/bin/which

Mehr Informationen zu which and where findet man in der Manpage tcsh(1) und which(1).

Related Entries:
Piepston der tcsh deaktivieren
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
 Permalink

Liste der besuchten Verzeichnisse merken

Verwendet man die tcsh, so können die besuchten Verzeichnisse mit Hilfe von pushd zwischengespeichert werden:

# pwd
/usr/home/test
# pushd /usr/local/tinderbox
/usr/local/tinderbox ~ 
# pwd
/usr/local/tinderbox
# pushd /tmp
/tmp /usr/local/tinderbox ~

Die gemerkten Verzeichnisse können durch dirs angezeigt werden:

# dirs 
/tmp /usr/local/tinderbox ~ 

Verwendet man die -v Option, werden die gemerkten Verzeichnisse auf eine andere Weise dargestellt:

# dirs -v
0       /tmp
1       /usr/local/tinderbox
2       ~

Mit popd kann man wieder in die gemerkten Verzeichnisse zurückwechseln. Dabei wechselt man bei der ersten Eingabe von popd in das erste gespeicherte Verzeichnis, bei der zweiten Eingabe in das zweite gespeicherte Verzeichnis usw.

# pwd
/tmp
# popd
/usr/local/tinderbox ~ 
# pwd
/usr/local/tinderbox
# popd
~ 
# pwd
/usr/home/test

Mehr Informationen zur tcsh findet man in der Manpage tcsh(1).

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
Vervollständigung in der tcsh
 Permalink

foreach-Schleife in der tcsh

Mit der foreach-Schleife können in der tcsh Operationen auf mehreren Dateien gleichzeitig ausgeführt werden. Startet man eine foreach-Schleife, muss eine Variable deklariert werden und angegeben werden, welche Dateien modifiziert werden sollen. Danach können die Befehle, die auf den Dateien angewendet werden sollen, angegeben werden. Anschliessend wird die Schleife mit end beendet. Im folgenden Beispiel wird allen Dateien der Suffix .orig angehängt:

#  ls
file0 file1 file2 file3
# foreach file (*)
foreach? mv $file $file.orig
foreach? end
# ls
file0.orig file1.orig file2.orig file3.orig

Nun können auf den Dateinamen Substitution Patterns der tcsh verwendet werden. So wird im folgenden Beispiel der Suffix .orig durch .test ersetzt:

# foreach file (*)
foreach? mv $file $file:s/.orig/.test/
foreach? end
# ls
file0.test file1.test file2.test file3.test

Soll der Suffix entfernt werden, kann dies mit $file:r gemacht werden:

# foreach file (*)
foreach? mv $file $file:r
foreach? end
# ls
file0 file1 file2 file3

Nun kann der erste Buchstabe des Dateinamens mit Hilfe von $file:u in einen Grossbuchstaben umgewandelt werden:

# foreach file (*)
foreach? mv $file $file:u
foreach? end
# ls
File0 File1 File2 File3

Umgekehrt kann der erste Buchstaben auch wieder in einen Kleinbuchstaben geändert werden:

# foreach file (*)
foreach? mv $file $file:l
foreach? end
# ls
file0 file1 file2 file3

Mehr Informationen zu der foreach-Schleife und den Substitution Patterns der tcsh findet man in der Manpage tcsh(1).

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
tcsh bei Inaktivität beenden
Vervollständigung in der tcsh
Comments (2)  Permalink

tcsh bei Inaktivität beenden

Benutzt man die tcsh, so kann man mit der Variable autologout festlegen, nach wievielen Minuten eine Shell automatisch beendet wird, wenn man auf der Shell keine Eingabe tätigt. Gibt man folgende Zeile in der tcsh ein, so wird die Shell automatisch nach 60 Minuten Inaktivität beendet:

# set autologout = 60

Durch das Setzen eines zweiten Wertes kann die Anzahl Minuten angegeben werden, nach der eine Shell bei Inaktivität gesperrt werden soll. Folgendes Beispiel sperrt die Shell nach 30 Minuten und beendet die Shell nach 60 Minuten:

# set autologout = (60 30)

Um die Werte dauerhaft für einen Benutzer zu setzen, kann die Zeile in der ~/.cshrc eingefügt werden. Soll die Variable für alle tcsh Benutzer gesetzt werden, fügt man die Zeile in die /etc/csh.cshrc ein.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
Vervollständigung in der tcsh
 Permalink

Vervollständigung in der tcsh

Eine der wirklich starken Funktionen der tcsh ist die Vervollständigung. Standardmässig werden unter FreeBSD nur Verzeichnisse und Dateien vervollständigt. Gibt man ein Kommando, zum Beispiel ls, in die Shell ein, und drückt danach Ctrl + d, werden einem die verfügbaren Dateien und Verzeichnisse angezeigt. Nun kann man den Anfang eines Dateinamens eingeben und versuchen mit der Tabulatortaste den Dateinamen zu vervollständigen. Dies klappt nur, wenn nur noch ein Dateiname zu der Eingabe passt, treffen mehrere zu, so passiert nichts und man muss noch einen weiteren Teil des Namens eingeben. Man kann jederzeit mit Ctrl + d die Dateinamen anzeigen lassen, mit der die eingegebenen Zeichen vervollständigt werden können.

Mit der tcsh kann jedoch noch viel mehr vervollständigt werden. Folgende Zeilen können in der ~/.cshrc oder in der /etc/csh.cshrc eingefügt werden. Die folgenden Beispiele basieren auf der .tcshrc von Justin Randall. Die Zeilen für die Vervollständigungen in der cshrc müssen zwischen folgenden Zeilen stehen, damit Wildcards nicht interpretiert werden:

set noglob
<... Regeln für die Vervollständigungen ...>
unset noglob

Möchte man zum Beispiel, bei ssh <Host> den Host vervollständigen, so fügt man folgende Regel, die die /etc/hosts und ~/.ssh/known_hosts ausliest und damit den Host vervollständigt, in die cshrc hinzu. Auch werden mirror.switch.ch und ftp.freebsd.ch manuell zur Host-Liste hinzugefügt:

   if ( -r /etc/hosts ) then
set hosts=(`awk '/^[1-9].*/ {print $2'} /etc/hosts`)
endif
if ( -r $HOME/.ssh/known_hosts ) then
set f=`cat $HOME/.ssh/known_hosts | cut -f 1 -d \ ` >& /dev/null
set hosts=($hosts $f)
unset f
endif
set hosts=($hosts mirror.switch.ch ftp.freebsd.ch)
complete ssh 'n/-l/u/' 'n/*/$hosts/'

Verwendet man mit dieser Regel die -l Option von ssh, um einen Benutzer anzugeben, so werden die Benutzer aus /etc/passwd zur Vervollständigung angeboten.

Ist die Variable $host gesetzt, so wie es in der obigen Regel gemacht wurde, so kann folgende Regel verwendet werden, um bei ping und traceroute den host zu vervollständigen:

   complete {ping,traceroute} p/1/\$hosts/

Zur Vervollständigung von kill verwendet man folgende Regel:

   complete kill    'c/-/S/' 'p/1/(-)//' 'c/%/j/' \
'n/*/`ps -U $LOGNAME | awk '"'"'{print $1}'"'"'`/'

Damit werden bei einem kill -<Signal> <PID> das Signal durch alle verfügbaren Signale und die PID durch alle PID's von Prozessen des aktuellen Benutzers vervollständigt.

Mit folgender Regel wird bei einem ifconfig die Schnittstelle durch alle verfügbaren Schnittstellen vervollständigt und auch ein paar öfters gebrauchte Optionen wie up, down und noch ein paar andere vervollständigt:

   complete ifconfig   'p@1@`ifconfig -l`@' 'n/*/(range phase link netmask \
mtu up metric mediaopt down delete \
broadcast arp debug)/'

Sollen bei einem bunzip2 nur noch Dateien mit der Endung bz2 vervollständigt werden, benutzt man diese Regel:

  complete bunzip2     'p/*/f:*.bz2/'
Sollen bei einem umount nur die gemounteten Partitionen zur Vervollständigung angeboten werden, so kann man folgende Regel verwenden:
  complete umount       c/-/"(a A f c)"/ \
n/*/'`mount | cut -d " " -f 3`'/

Möchte man selber Vervollständigungen erstellen, so findet man in der tcsh(1) eine detaillierte Anleitung.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink

Manpage mittels F1 aufrufen

Hat man unter Umständen einen längeren Befehl in der tcsh eingegeben, möchte aber noch was zum Befehl in der Manpage nachlesen, so kann man zum Beispiel ein neues Terminal aufmachen und die Manpage zum Befehl lesen. Einen einfacheren Weg bekommt man, wenn man folgende Zeilen in die ~/.cshrc einfügt:

alias helpcommand man
bindkey ^[OP run-help # F1 xterm
bindkey ^[[M run-help # F1 cons25

Jetzt kann man während der Eingabe eines Befehls die F1 Taste drücken, wodurch die Manpage des eingegebenen Befehls geöffnet wird. Beendet man die Manpage wieder mit q, so ist der Befehl noch immer in der tcsh eingegeben und man kann sofort weiterarbeiten.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink

Befehle in der tcsh zu einer bestimmten Zeit ausführen

In der tcsh lassen sich Befehle zu einer bestimmten Zeit ausführen. Muss man zum Beispiel um 17:00 gehen, so kann man sich um 16:45 eine Warnung in der Shell ausgeben, um 17:00 den Shellpromt ändern und um 17:05 den Rechner automatisch herunterfahren lassen:

# sched 16:45 echo Du musst langsam gehen
# sched 17:00 set prompt="Los jetzt >"
# sched 17:05 shutdown -p +1 Ich hab Dich gewarnt

Die gespeicherten Befehle lassen sich mit sched ansehen:

# sched
1 16:45 echo Du musst langsam gehen
2 17:00 set prompt="Los jetzt >"
3 17:05 shutdown -p +1 Ich hab Dich gewarnt

Möchte man jetzt einen Befehl wieder entfernen, so benutzt man die Nummer, die von sched vor jeden Befehl angezeigt wird:

# sched -3
# sched
1 16:45 echo Du musst langsam gehen
2 17:00 set prompt="Los jetzt >"

Auch lässt sich die Zeit in Stunden und Minuten von der aktuellen Zeit her angeben:

# date 
Sa 13 Jan 2007 11:34:20 CET
# sched +0:5 echo xyz zurückrufen
# sched
1 11:39 echo xyz zurückrufen

Was man Bedenken sollte ist, dass wenn man die Shell schliesst, auch die gespeicherten Befehle weg sind.

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink

history der tcsh benutzen

Die tcsh merkt sich die zuletzt verwendeten Befehle, so dass man diese zu einem späteren Zeitpunkt wieder verwenden kann. Die ganze Liste der verwendeten Befehle kann wie folgt angeschaut werden:

# history
114 9:56 cd /tmp/
115 9:56 ls -aol
116 9:56 more test
117 9:57 ssh test.chruetertee.ch
118 9:57 history

Die Grösse der History kann für einen Benutzer in der ~/.cshrc oder für alle Benutzer in der /etc/csh.cshrc festgelegt werden:

set history = 1000

Auch kann festgelegt werden, wieviele Befehle bei einem Logout gespeichert werden sollen, damit sie beim nächsten Anmelden wieder zur Verfügung stehen:

set savehist = 100

Der zuletzt verwendete Befehl kann ganz einfach mit zwei Ausrufezeichen nochmals ausgeführt werden:

# !!
history
114 9:56 cd /tmp/
115 9:56 ls -aol
116 9:56 more test
117 9:57 ssh test.chruetertee.ch
118 9:57 history
119 9:58 history

Vor jedem Befehl in der History steht eine Nummer. So kann ein ganz bestimmter Befehl nochmals ausgeführt werden, indem man ein Ausrufezeichen und die Nummer des Befehls in der tcsh eingibt:

# !115
ls -aol

Gibt man ein Ausrufezeichen und einige Buchstaben ein, so wird der letzte Befehl ausgeführt, welcher mit diesen Buchstaben beginnt:

# !mo
more test

Möchte man nur den Befehl sehen und nicht ausführen, so hängt man ein Doppelpunkt und ein p an:

# !mo:p
more test

Mit einem Fragezeichen nach dem Ausrufezeichen wird der letzte Befehl ausgeführt, der die Zeichenfolge nach dem Fragezeichen beinhaltet:

# !?tmp
cd /tmp/

Auch lassen sich Befehle direkt mit einem sed nach einem Doppelpunkt bearbeiten. Folgendes Beispiel führt Befehl 117 aus, tauscht allerdings test mit bla aus:

# !117:s/test/bla/
ssh bla.chruetertee.ch
Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink

Eingegebene Zeile in der tcsh löschen

In der tcsh kann eine eingegebene Zeile mit Ctrl + u ganz gelöscht werden. Soll nur der Teil einer Zeile von der aktuellen Cursorposition bis zum Zeilenende gelöscht werden, so kann dies mit Ctrl + k gemacht werden.
Related Entries:
Wort in der tcsh löschen
Programm mit which finden
Liste der besuchten Verzeichnisse merken
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
 Permalink
Next1-10/12