έγραψε:Όλα γίνονται κανονικά εκτός από την τελευταία εντολή "gnome-terminal -e cd bin" στην οποία ανοίγει το 3ο τερματικό και παίρνω error "There was an error creating the child process for this terminal".
Είναι λογικό να μην μπορείς να τρέξεις
gnome-terminal -e cd bin.
Η εντολή
gnome-terminal -e αυτό που κάνει είναι να ανοίγει ένα νέο παράθυρο με το προεπιλεγμένο τερματικό και να εκτελεί εκεί μέσα την εντολή (εκτελέσιμο) που του δίνεται ως παράμετρος. Το "ping" και ο "aMSN" είναι προγράμματα και μπορεί να εφαρμοστεί η λειτουργία. Το "cd" από την άλλη, αναγνωρίζεται από το ίδιο το τερματικό και δεν αποτελεί κάποιο εκτελέσιμο. Οπότε και δεν είναι δυνατόν να δημιουργηθεί νέα διεργασία γι' αυτό με το νέο τερματικό.
Δοκίμασε να τρέξεις την εντολή:
gnome-terminal -e trixes_katsares και θα σου βγάλει το ίδιο μήνυμα
έγραψε: 
(1) Από ότι έχω παρατηρήσει υπάρχουν εντολές που τρέχουν απ'ευθείας όπως η "
cd" και η "
ls" και άλλες που τρέχουν συνεχώς μέχρι να τις σταματήσει ο χρήστης όπως η "
top" και η "
ping".Επομένως στο τέλος των εντολών που συνεχίζουν να τρέχουν πρέπει να βάζω "
&" για να μπορέσει να ξεκινήσει η επόμενη εντολή σε άλλο παράθυρο.Σωστό είναι αυτό?
Δεν κατάλαβα ακριβώς τι θέλεις να πεις. Αν εννοείς ότι επειδή κάποιες εντολές δεν εκτελούνται στιγμιαία, αλλά χρειάζονται την παρέμβαση του χρήστη για να τερματίσουν, οπότε πρέπει να τις τρέξεις στο background για να μείνει ελέυθερο το τερματικό, τότε ναι. Έχεις δίκιο.
Εξαρτάται, όμως, τι θέλεις να κάνεις. Το script το φτιάχνεις για να αυτοματοποιήσεις μία εργασία. Εάν η εργασία π.χ. απαιτεί να ανοιχθεί ένα αρχείο με επεξεργαστή κειμένου (ας πουμε
vim my_file) και αφού ο χρήστης κλείσει τον vim ΤΟΤΕ ΚΑΙ ΜΟΝΟ ΤΟΤΕ να συνεχιστεί η εκτέλεση στο script, φυσικά και ΔΕ θα βάλεις &.
Και για να σε διορθώσω και λίγο, το & δεν ανοίγει νέο παράθυρο, αλλά τρέχει το πρόγραμμα στο background. Ψάξε λίγο τις εντολές
jobs, fg, bg και συναφή και αν χρειαστείς διευκρινίσεις ξαναρώτα.
έγραψε: 
(2) Το πρώτο μέρος του script δηλαδή μέχρι και την εντολή "
mv",τρέχει κανονικά αλλά το παράθυρο που εκτελείται μετά κλείνει.Πως γίνεται να το κρατήσω το παράθυρο αυτό ανοικτό?Παράδειγμα πως να τρέξω την "
gnome-terminal -e "echo something"" και το παράθυρο που θα ανοίξει να μείνει ανοικτό?
α)Με ένα γρήγορο man gnome-terminal
Υπάρχει η παράμετρος
--window-with-profile PROFILE_NAMEΤο μόνο που έχεις να κάνεις είναι να δημιουργήσεις ένα νέο profile (ή να αλλάξεις το default για να το χρησιμοποιείς χωρίς την παράμετρο) στο οποίο θα κρατάς το παράθυρο ανοιχτό.
Στο terminal ==> Edit ==> Profiles ==> New/Edit ==> Title and Command ==> When command exits: Hold the terminal open
Εάν κάνεις new, χρησιμοποίησε το όνομα αντί για PROFILE_NAME
β)Ένας κάπως μπακάλικος τρόπος είναι να φτιάξεις δύο script.
- Κώδικας: Επιλογή όλων
#script1:
<το δικό σου>
gnome-terminal -e ./script2
----
#script2:
echo "Something"
read
γ)
- Κώδικας: Επιλογή όλων
xterm -hold -e echo "Something"
έγραψε: 
(3) Τα σύμβολα
&& και
& στο τέλος μιας εντολής σημαίνουν "εκτέλεσε την επόμενη εντολή αν η παρούσα εκτελέστηκε με επιτυχία" και "εκτέλεσε την επόμενη εντολή χωρίς να περιμένεις την παρούσα να τελειώσει".Έτσι είναι ή κάνω λάθος?Επίσης αν στο τέλος της εντολής δεν έχει τίποτα από τα παραπάνω με ποιά λογική εκτελείται η επόμενη εντολή? (εννοώ την επόμενη γραμμή).
Σωστά τα λες, αλλά επειδή σε βλέπω ότι τα σκαλίζεις, θα σου πω δυο λόγια παραπάνω.
Από στοιχειώδης γνώσεις C θα γνωρίζεις ότι τα & και && αποτελούν το λογικό ΚΑΙ.
Όταν, λοιπόν, γράφεις:
ΕΝΤΟΛΗ1 & (ή &&)
ΕΝΤΟΛΗ2
στην ουσία του λες να εκτελέσει την ΜΙΑ εντολή:
ΕΝΤΟΛΗ1 & (ή &&) ΕΝΤΟΛΗ2
Η διαφορά τους;
Κάθε εντολή στο linux επιστρέφει 0 εάν εκτελέστηκε σωστά ή κάτι άλλο εάν συνέβη σφάλμα.
Γράφοντας (έκφραση1 & έκφραση2) ο υπολογιστής επιστρέφει 0 ή διάφορο του 0 αφού αποτιμήσει ΚΑΙ ΤΙΣ ΔΥΟ ΕΚΦΡΑΣΕΙΣ.
Αντίθετα, γράφοντας (έκφραση1 && έκφραση2), εφ' όσον η έκφραση1 είναι ψευδής (δηλ. 0), η αποτίμηση της δεύτερης έκφρασης ΠΑΡΑΛΕΙΠΕΤΑΙ αφού είναι ΠΕΡΙΤΤΗ.
Ανάγοντας το θέμα στην εκτέλεση εντολών, το σύμβολο & τρέχει τις δύο εντολές ΤΑΥΤΟΧΡΟΝΑ, φέρνοντας την πρώτη στο background.
Αντίθετα, το && περιμένει να δει τι θα επιστρέψει η πρώτη εντολή και ύστερα:
1) αν η πρώτη επέστρεψε 0 (επιτυχής), προχωράει στην εκτέλεση της δεύτερης προκειμένου να αποτιμήσει την τελική έκφραση ( '0' ΚΑΙ Χ = Χ )
2) αν η πρώτη δεν επέστρεψε 0 (μη επιτυχής) ΔΕΝ προχωράει στην εκτέλεση της δεύτερης, αφού δεν χρειάζεται για την αποτίμηση της δεύτερης έκφρασης ( '1' ΚΑΙ Χ = '1')
Εάν είναι από κάτω που ρώτησες, απλά περιμένει να ολοκληρωθούν τα από πάνω και την εκτελεί ανεξάρτητα από την επιτυχή ή μη εκτέλεση των από πάνω.
έγραψε: 
(4) Τι σύμβολο πρέπει να χρησιμοποιήσω στο τέλος μιας εντολής για να πετύχω "εκτέλεσε την επόμενη εντολή χωρίς να περιμένεις την παρούσα να τελειώσει αλλά μόνο αν η παρούσα εκτελέστηκε με επιτυχία".Δηλαδή συνδιασμός των
&& και
&.

Ξαναδιάβασε λίγο τι έγραψες και θα γελάσεις και συ!
Ζητάς από το τερματικό σου, να εκτελέσει την επόμενη εντολή ΜΟΝΟ αν η προηγούμενη έχει ολοκληρωθεί με επιτυχία, ΑΛΛΑ ΧΩΡΙΣ να περιμένει καν να... ολοκληρωθεί!
έγραψε: 
(5) Σε κάποιες περιπτώσεις όπως η επόμενη που παραθέτω σταματάω την εντολή "
ping" που εκτελείται στο τερματικό με
Ctrl+C και η εντολή σταματάει να εκτελείται στιγμιαία και αμέσως μετά ξεκινάει να εκτελείται πάλι από την αρχή.
- Κώδικας: Επιλογή όλων
#!/bin/bash
cd ~/Desktop &&
ping www.google.com &
mkdir TEST
Το λάθος που κάνεις είναι που πιστεύεις ότι με CTRL+C σταματάς το ping.
Στην πραγματικότητα το ping τρέχει στο background (&) και ενώ εσύ βλέπεις την έξοδό του στο τερματικό, δεν έχεις κανέναν έλεγχο απέναντί του.
Το CTRL+C το στέλνεις στο ίδιο το τερματικό, το οποίο στο foreground δεν έχει κανένα πρόγραμμα για να το στείλει!
Δοκόμασε την εντολή με "&&" που δεν το στέλνει στο background, ή διαφορετικά πέτα του ένα "killall ping" να δεις που θα πάει...
Αυτά
