telnet exit
Giorgos Keramidas
keramida at ceid.upatras.gr
Tue Feb 14 22:40:10 EET 2006
On 2006-02-14 22:26, Stella Korakaki <skor at hellug.gr> wrote:
> > Είναι 'builtin' εντολή του shell:
> >
> > $ /bin/tcsh
> > > which exit
> > exit: shell built-in command.
> >
> > $ bash
> > bash-3.00$ type exit
> > exit is a shell builtin
> >
> > > Αν υποθέσουμε οτι φτιάξω ενα script που κανει ασχετα εστω ενα echo
> > > "hello world" ... κι αυτο υπαρχει πχ στο /usr/bin/exit κι ειναι
> > > εκτελεσιμο απο ολους...
> >
> > Θα εκτελεστεί μόνο αν ο χρήστης ζητήσει ΡΗΤΑ με pathname το
> > /usr/bin/exit ή αν τρέξει κάτι σαν:
> >
> > $ \exit
> >
> > Που λέει, π.χ. στο bash, να κοιτάξει πραγματικά στο PATH για κάποιο
> > 'exit' binary, κι όχι στα aliases ή τα builtin commands.
> >
> > > Γιατι οταν πατάω exit απλα να φευγω απο το login shell που είμαι και
> > > να μη βλεπω ενα hello world ?
> >
> > Εδώ σ' έχασα.
>
>
> Οκ κι εγω μ'εχασα.
>
> Παμε απο την αρχη...
>
> καταρχην:
> kors at neo:~$ echo $SHELL
> /bin/bash
> kors at neo:~$ which exit
> kors at neo:~$ /bin/csh
> neo:~> which exit
> exit: εσωτερική εντολή του shell.
> Αυτο μου δειχνει οτι το bash δεν ξερει τι θα πει exit ενω το csh/tcsh
> το θεωρεί δικιά του εντολή.
Οχι ακριβώς. Ξέρει. Απλά δεν το ρωτάς με τον σωστό τρόπο. Στα
shells που είναι απόγονοι του /bin/sh (όπως το bash), ο σωστός
τρόπος δεν είναι με ``which'' αλλά με ``type''. Δες π.χ. τη
διαφορά στις δύο παρακάτω εντολές και την έξοδό τους:
keramida at flame:/home/keramida$ echo $SHELL
/usr/local/bin/bash
keramida at flame:/home/keramida$ which emacs
keramida at flame:/home/keramida$ type emacs
emacs is aliased to `nemacs'
Αυτό συμβαίνει γιατί το which(1) είναι εξωτερικό πρόγραμμα:
keramida at flame:/home/keramida$ type which
which is hashed (/usr/bin/which)
Ετσι δεν έχει πρόσβαση στα "σωθικά" του bash, εκεί που
μεταφράζονται οι εσωτερικές εντολές και τα aliases.
Αντίθετα, για όσα εκτελέσιμα είναι πραγματικά αρχεία, κάπου στο
τρέχον $PATH, το which(1) παίζει πάντα σωστά και τυπώνει το ίδιο
αποτέλεσμα με την εσωτερική εντολή ``type'' του bash:
keramida at flame:/home/keramida$ which nemacs
/home/keramida/bin/nemacs
keramida at flame:/home/keramida$ type nemacs
nemacs is /home/keramida/bin/nemacs
keramida at flame:/home/keramida$
> Οκ ας το αφησουμε αυτο
> .
> Ειμαι λοιπον σ'ενα shell πχ csh. Οταν πατάτω exit... τί εχει
> μεγαλύτερη προτεραιώτητα?
Οταν γράφεις μια ``εντολή'' στο shell prompt, τότε το shell
προσπαθεί να βρει -- με αυτή τη σειρά -- αν υπάρχει:
- κάποιο 'alias'
- κάποιο 'shell function'
- κάποια εσωτερική εντολή
- κάποιο πρόγραμμα στο PATH
Το πρώτο που θα βρει, είναι κι αυτό που υπερισχύει. Γι αυτό
π.χ. μπορείς να γράψεις:
keramida at flame:/home/keramida$ alias exit='echo "ti le re, barethikame kiolas?"'
keramida at flame:/home/keramida$ exit
ti le re, barethikame kiolas?
keramida at flame:/home/keramida$
Εδώ υπερισχύει το alias 'exit'.
Οταν δεν υπάρχει alias αλλά υπάρχει function, υπερισχύει το shell
function:
keramida at flame:/home/keramida$ unalias exit
keramida at flame:/home/keramida$ exit()
> {
> echo 'KOT?!'
> }
keramida at flame:/home/keramida$ exit
KOT?!
keramida at flame:/home/keramida$
Οταν υπάρχει πάλι alias, ξανα υπερισχύει το alias:
keramida at flame:/home/keramida$ exit()
> {
> echo 'KOT?!'
> }
keramida at flame:/home/keramida$ alias exit='echo "booh..."'
keramida at flame:/home/keramida$ exit
booh...
keramida at flame:/home/keramida$
Οταν δεν υπάρχει κανένα από αυτά, τότε υπερισχύει η builtin εντολή,
οπότε και τερματίζει το shell :-)
> - Να ψάξει στο path μου να βρει μια εντολή exit που δε μας νοιαζει τι
> κανει ... μπορεί να παίζει κι ενα τραγουδι? (χλωμο)
> - Να εκτελέσει την build in εντολη exit του csh? Ας πουμε αν πειράζω
> την buildin exit κανει οτιδηποτε?
> ή οταν βλέπει exit το πρώτο πράγμα
> που κάνει ειναι να το στέλνει απλα πχ στο telnet/ssh απο το οποιο
> κσεκινησα το shell στο οποιο βρισκομαι?
> ή οταν παταω exit ειναι απλα exit και ποιος ειναι υπεύθυνος γι'αυτό?
>
> ουφ μπερδευετηκα βραδιατικα.
Απλά δεν είχες καταλάβει σωστά τη σειρά.
More information about the Linux-greek-users
mailing list