alkisg Δημοσ. 11 Σεπτεμβρίου 2008 Share Δημοσ. 11 Σεπτεμβρίου 2008 Φτιάχνουμε ένα σκριπτάκι να κάνει κάτι. Το τρέχουμε από κονσόλα κι αν κάτι δεν πάει καλά μας ειδοποιεί με echo. Του κάνουμε συντόμευση στην επιφάνεια εργασίας και το τρέχουμε, οπότε δε φαίνεται κονσόλα και το echo πάει περίπατο. Μπορεί όμως να χρησιμοποιηθεί η xmessage αντί για την echo, οπότε να ειδοποιείται πάλι ο χρήστης. ...και το πρόβλημα είναι, πώς το script μπορεί να κάνει detect αν "το βλέπει" ή όχι ο χρήστης, ώστε να χρησιμοποιήσει echo ή xmessage αντίστοιχα; Κάποια μεταβλητή περιβάλλοντος φαντάζομαι. Σύγκρινα λοιπόν τα environment variables στις δύο περιπτώσεις και βρήκα αρκετές διαφορές, αλλά δεν ξέρω ποια να διαλέξω. Π.χ. TERM=dumb είναι καλή επιλογή; > alkisg@alkisgL:/tmp$ diff set-interactive.txt set-noninteractive.txt 3a4 > BASH_EXECUTION_STRING='set > /tmp/set.txt' 8,9d8 < COLORTERM=gnome-terminal < COLUMNS=157 12d10 < DESKTOP_STARTUP_ID= 24,27d21 < HISTCONTROL=ignoreboth < HISTFILE=/home/alkisg/.bash_history < HISTFILESIZE=500 < HISTSIZE=500 33,35d26 < LESSCLOSE='/usr/bin/lesspipe %s %s' < LESSOPEN='| /usr/bin/lesspipe %s' < LINES=39 37d27 < LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:' 39d28 < MAILCHECK=60 44,48c33 < PIPESTATUS=([0]="0") < PPID=3901 < PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"' < PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' < PS2='> ' --- > PPID=1 50c35 < PWD=/home/alkisg/bin --- > PWD=/home/alkisg 53c38 < SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor --- > SHELLOPTS=braceexpand:hashall:interactive-comments 57c42 < TERM=xterm --- > TERM=dumb 62d46 < WINDOWID=75501216 68,77c52 < _=/tmp/set.txt < command_not_found_handle () < { < if [ -x /usr/lib/command-not-found ]; then < /usr/bin/python /usr/lib/command-not-found -- $1; < return $?; < else < return 127; < fi < } --- > _=/bin/bash Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 11 Σεπτεμβρίου 2008 Share Δημοσ. 11 Σεπτεμβρίου 2008 Φτιάχνουμε ένα σκριπτάκι να κάνει κάτι.Το τρέχουμε από κονσόλα κι αν κάτι δεν πάει καλά μας ειδοποιεί με echo. Του κάνουμε συντόμευση στην επιφάνεια εργασίας και το τρέχουμε, οπότε δε φαίνεται κονσόλα και το echo πάει περίπατο. Μπορεί όμως να χρησιμοποιηθεί η xmessage αντί για την echo, οπότε να ειδοποιείται πάλι ο χρήστης. Αν πας μια βόλτα στο /proc/<pid>/fd/ θα δεις τους file descriptors του αντίστοιχου process. Όταν το process «φαίνεται» κάπου (σε κονσόλα, σε terminal emulator ή στο screen), τότε ο file descriptor 1 (== stdout) θα είναι symbolic link σε κάποιο tty ή pts (pseudo-terminal) device. Επειδή το να το κοιτάξεις με το χέρι έχει κάποια δουλίτσα, υπάρχει η tty(1), η οποία επιστρέφει το terminal που βλέπει στη standard input (το οποίο στο 99% των περιπτώσεων που σε απασχολούν είναι το ίδιο με το terminal στη standard output για ένα απλό script) ή "not a tty" σε περίπτωση που αυτό τρέχει στο background. Μπορείς λοιπόν να χρησιμοποιήσεις την tty για έναν απλό σχετικά έλεγχο. Σε άλλες γλώσσες βέβαια τα πράγματα είναι πιο απλά, στην python για παράδειγμα μπορείς να ρωτήσεις απευθείας > sys.stdout.isatty() σε shell έχει λίγη παραπάνω δουλειά. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 11 Σεπτεμβρίου 2008 Μέλος Share Δημοσ. 11 Σεπτεμβρίου 2008 Γκαρσόν! Μία από μένα στον κύριο! (Υ.Γ., στα αναθεματισμένα ελληνικά μου βγάζει δεν είναι tty' - μαζί με την απόστροφο στο τέλος!!! ΟΚ, κοιτάω το exit code...) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 11 Σεπτεμβρίου 2008 Share Δημοσ. 11 Σεπτεμβρίου 2008 Το exitcode παίζει μόνο με το -s switch νομίζω ;-) Που θα πάει, δε θα ανέβω Γιάννενα; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 11 Σεπτεμβρίου 2008 Μέλος Share Δημοσ. 11 Σεπτεμβρίου 2008 Που θα πάει, δε θα ανέβω Γιάννενα; Πάντως αν ανέβεις κανόνισε να κάτσεις 2-3 μέρες για να προλάβεις να ξεμεθύσεις! (...μετά από τόσες μπύρες που χρωστάω...) :D Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
farfalinos Δημοσ. 11 Σεπτεμβρίου 2008 Share Δημοσ. 11 Σεπτεμβρίου 2008 εγώ πάλι αναρωτιέμαι πως γίνεται να έχει 1 εμφάνιση ένα θέμα,και να απαντιέται από πάνω από 1 άτομο Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 11 Σεπτεμβρίου 2008 Μέλος Share Δημοσ. 11 Σεπτεμβρίου 2008 Χε... τα views μετράνε ανά άτομο, όχι ανά page hit. Και ο αποστολέας του μηνύματος δε μετράει. Επομένως 1 = apoikos. Τουλάχιστον το smf που έχω εγώ έτσι κάνει... edit: το αποτέλεσμα: > #!/bin/bash # If running without a console, use graphical commands. if (tty -s); then ECHO=echo SUDO=sudo else ECHO="xmessage -center -timeout 5" SUDO=gksudo fi $SUDO ifconfig eth0:1 192.168.0.1/24 up $SUDO /etc/init.d/dhcp3-server restart $ECHO "Done!" Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
firewalker Δημοσ. 11 Σεπτεμβρίου 2008 Share Δημοσ. 11 Σεπτεμβρίου 2008 alkisg, ετοιμάζεις κάτι καλό; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
alkisg Δημοσ. 12 Σεπτεμβρίου 2008 Μέλος Share Δημοσ. 12 Σεπτεμβρίου 2008 Μπα, τα κλασσικά (ltsp κτλ), απλά στο ραφινάρισμα είμαι τώρα, π.χ. ήθελα να "μετατρέπω" το laptop σε ltsp server με διπλό κλικ από το desktop αντί από κονσόλα... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
capthookb Δημοσ. 16 Σεπτεμβρίου 2008 Share Δημοσ. 16 Σεπτεμβρίου 2008 Να ρωτήσω κι εγώ κάτι παρόμοιο αλλά σχεδόν άσχετο; Είμαι σε kde και τρέχω κάτι στο konsole, για παράδειγμα ένα apt-get uprade. Θέλω όμως να αλλάξω Desktop Environment ή να επανεκκινήσω τον Xserver, χωρίς να σταματήσει η διαδικασία του apt-get. Μπορώ φυσικά να τη στείλω στο background (με ctrl-z, bg). Κλείνω το konsole, κάνω επανεκκίνηση τον Χ. Μπορώ να επαναφέρω το output του apt-get στο νέο konsole που θα ανοίξω; alkisg μόλις είδα πως ένας άλλος τρόπος για να κάνεις αυτό που θες είναι να κάνεις ένα > $ ps ax | grep script_name | grep -v grep | awk '{print $2}' και να ελέγχεις αν αυτό που επιστρέφει είναι ? ή κάποιο pts... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
nske Δημοσ. 16 Σεπτεμβρίου 2008 Share Δημοσ. 16 Σεπτεμβρίου 2008 Μπορώ φυσικά να τη στείλω στο background (με ctrl-z, bg). Κλείνω το konsole, κάνω επανεκκίνηση τον Χ. Δε μπορείς να το κάνεις αυτό. Με το που την στέλνεις στο background κατα κανόνα παγώνει την εκτέλεσή της ενώ αν κλείσεις και την Konsole τερματίζει. Μπορώ να επαναφέρω το output του apt-get στο νέο konsole που θα ανοίξω; Θα πρέπει να χρησιμοποιήσεις έναν terminal manager σαν τη screen. Κορυφαία εφαρμογή, περιορίζει την ανάγκη για πολλά terminal tabs ή ssh sessions! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
firewalker Δημοσ. 16 Σεπτεμβρίου 2008 Share Δημοσ. 16 Σεπτεμβρίου 2008 Εδώ μάλλον θα λατρέψεις το srceen. http://en.wikipedia.org/wiki/GNU_Screen Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
apoikos Δημοσ. 16 Σεπτεμβρίου 2008 Share Δημοσ. 16 Σεπτεμβρίου 2008 Screen και τα μυαλά στα κάγκελα Από τα αναντικατάστατα κομμάτια software. Αν θες απλά να κάνεις detach/reattach μια διεργασία, υπάρχει και το dtach. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
nske Δημοσ. 16 Σεπτεμβρίου 2008 Share Δημοσ. 16 Σεπτεμβρίου 2008 Ατςςςς σε πρόλαβα firewalker! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
capthookb Δημοσ. 16 Σεπτεμβρίου 2008 Share Δημοσ. 16 Σεπτεμβρίου 2008 Δε μπορείς να το κάνεις αυτό. Με το που την στέλνεις στο background κατα κανόνα η εφαρμογεί παγώνει την εκτέλεσή της ενώ αν κλείσεις και την Konsole τερματίζει. Παγώνει μέχρι να εκτελέσω το bg και να πάει στο background. Είναι σαν να εκτέλεσα > # script_name & Θα πρέπει να χρησιμοποιήσεις έναν terminal manager σαν τη Screen Αα, ναι υπάρχει το screen. Το είχα διαβάσει στο slackbook αλλά δεν το χρησιμοποίησα ποτέ και ξέχασα οτι υπάρχει. Πάντως πρέπει να έχω προνοήσει και να έχω τρέξει το screen πριν κάνω αυτό που θέλω. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.