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