dimitris_k Δημοσ. 28 Μαρτίου 2011 Share Δημοσ. 28 Μαρτίου 2011 Καλησπέρα, ξέρει κανείς πως μπορώ να επιστρέψω κάποια τιμή από τη main; Έχω διαβάσει πως η main στη java δε μπορεί να επιστρέψει τιμές αλλά κάτι μπορεί να γίνει καλώντας την System.exit(). Θέλω να επιστρέψω είτε int είτε sting. Το πρόβλημά μου είναι ότι καλώ μέσω .sh προγράμματος ένα πρόγραμμα .java και θέλω το .java πρόγραμμα να μου επιστρέψει μία τιμή ώστε να αλλάξω το περιεχόμενο μίας μεταβλητής στο shell script. Μπορείτε να προτείνετε κάτι; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
pinball_elf Δημοσ. 28 Μαρτίου 2011 Share Δημοσ. 28 Μαρτίου 2011 Δεν μπορείς να επιστρέψεις String. Μόνο integer, και γίνεται όπως ακριβώς λές με την System.exit: > System.exit(1); Αλλά θέλει προσοχή γιατί καλώντας αυτή την μέθοδο στην ουσία "σκοτώνεις" την Java virtual machine. Σαν να κάνεις shutdown το λειτουργικό σου σύστημα. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
warchief Δημοσ. 28 Μαρτίου 2011 Share Δημοσ. 28 Μαρτίου 2011 Εφόσων θέλεις string μπορείς να το κάνεις print στο stdout απο το java προγραμμα και να το πιάσεις απο το shell με τον standard τρόπο: FOO=`java MyMainJavaClass` if [ $FOO = 'whatever' ]; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
pinball_elf Δημοσ. 28 Μαρτίου 2011 Share Δημοσ. 28 Μαρτίου 2011 Εφόσων θέλεις string μπορείς να το κάνεις print στο stdout απο το java προγραμμα και να το πιάσεις απο το shell με τον standard τρόπο: FOO=`java MyMainJavaClass` if [ $FOO = 'whatever' ]; Πολύ καλύτερη λύση κατα την γνώμη μου! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
dimitris_k Δημοσ. 28 Μαρτίου 2011 Μέλος Share Δημοσ. 28 Μαρτίου 2011 Καλώ το πρόγραμμα .java μέσα από shell script με αυτή την εντολή >accept=`java CheckName $fileName` και έχω μέσα στο .java αυτό το κομμάτι κώδικα: >if (accept == one) { System.exit(1); } else { System.exit(0); } Όπου accept και one είναι μεταβλητές τύπου int. Μέσα στο .java έχω και κάποια μηνύματα που εκτυπώνονται στην οθόνη με αποτέλεσμα να λαμβάνω αυτό το μήνυμα: >execute.sh: line 4: [: the printed message: integer expression expected η γραμμή 4 είναι: >accept=`java CheckName $fileName` Δοκίμασα να κάνω >System.out.print("μήνυμα") αλλά επειδή έχει και άλλες print το .java δημιουργείται πρόβλημα γιατί προσπαθεί να αποθηκεύσει όλα τα μηνύματα που εκτυπώνονται στην "accept" Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
pinball_elf Δημοσ. 28 Μαρτίου 2011 Share Δημοσ. 28 Μαρτίου 2011 Ε τότε αφού δεν μπορείς να κάνεις χωρίς την System.exit() τροποποίησε την 4 γραμμή ως εξής: > mycommand=`java CheckName $fileName` accept=$? δοκίμασε και το: > accept=`java CheckName $fileName | tail -1` Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
dimitris_k Δημοσ. 28 Μαρτίου 2011 Μέλος Share Δημοσ. 28 Μαρτίου 2011 στο πρώτο > mycommand=`java CheckName $fileName` accept=$ μου βγάζει σφάλμα >execute.sh: line 4: [: $: integer expression expected και στο δεύτερο >accept=`java CheckName $fileName` | tail -l δεν βγαίνει ποτέ απο την επανάληψη επίσης και στις δύο περιπτώσεις παραβλέπονται τα υπόλοιπα μηνύματα που θα έπρεπε να εκτυπώνονται Σκέφτηκα να κάνω ανακατεύθυνση των αποτελεσμάτων του .java προγράμματος και να γράφονται σε ένα .txt αρχείο. Και μετά να διαβάσω το .txt αρχείο το οποίο και να εκτυπώσω την οθόνη χωρίς την τελευταία του γραμμή η οποία θα περιέχει την τιμή που θέλω να πάρει η "accept". Δεν ξέρω όμως πως να διαβάσω το αρχείο και να δώσω στην "accept" την τελευταία γραμμή του αρχείου σε bash shell script. Μπορεί κάποιος να με βοηθήσει με αύτο; Την ανακατελυθυνση την έκανα με αυτό τον τρόπο >java CheckName $fileName>dokimi.txt και δουλεύει σωστά. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
warchief Δημοσ. 28 Μαρτίου 2011 Share Δημοσ. 28 Μαρτίου 2011 Γιατι το κάνεις δύσκολο, δεν χρειάζεται να ανακατευθύνεις την έξοδο του προγράμματος σε αρχείο. Πάρε ένα απλό παράδειγμα > /* Αρχείο Main.java */ class Main { public static void main(String args[]) { System.out.println("Foo at console"); } } > # Αρχείο main.sh #!/bin/bash java_bin="/usr/bin/java" java_class="Main" result=`$java_bin $java_class` EXPECTED_OUT="Foo at console" if [ "$result" == "$EXPECTED_OUT" ] then echo "Expected output cought" else echo "Output different than expected" fi Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
dimitris_k Δημοσ. 29 Μαρτίου 2011 Μέλος Share Δημοσ. 29 Μαρτίου 2011 Διαβάζοντας το τελευταίο σχόλιο και τον κώδικα σκέφτηκα πως όντος κάνω τα πράγματα δύσκολα. Συνειδητοποίησα ότι όταν το .java πρόγραμμα επιστρέφει ότι η τιμή είναι αποδεκτή τότε έχω μόνο μία >System.out.print() οπότε μπορεί να δωθεί η τιμή αυτή στη μεταβλητή μου στο shell script και στον έλεγχο να συγκρίνω με την τιμή αυτή. Αντέστρεψα τη συνθήκη στον έλεγχο της επανάληψης και δούλεψε σωστά. Σας ευχαριστώ όλους πάρα πολύ. Για εμένα ήτανε ουσιαστική η βοήθειά σας. Αν κάποιος γνωρίζει πως από το shell script μπορώ να διαβάσω .txt αρχείο και να δώσω σε μεταβλητή την τιμή συγκεκριμένης σειράς τότε θα με ενδιέφερε να το μάθω. Δε μου χρειάζεται αυτή τη στιγμή αλλά θα ήθελα να ξέρω αν όντος γίνεται και πως. Και πάλι ευχαριστώ πολύ. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
warchief Δημοσ. 29 Μαρτίου 2011 Share Δημοσ. 29 Μαρτίου 2011 πως από το shell script μπορώ να διαβάσω .txt αρχείο και να δώσω σε μεταβλητή την τιμή συγκεκριμένης σειράς Τι εννοείς ακριβώς, δώσε ένα παράδειγμα Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
pinball_elf Δημοσ. 29 Μαρτίου 2011 Share Δημοσ. 29 Μαρτίου 2011 π.χ. : η παρακάτω εντολή σου τυπώνει την πέμπτη γραμμή του αρχείου myfile.txt: > head -5 myfile.txt | tail -1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.