Προς το περιεχόμενο

Εκτέλεση tcsh script μέσα από bash script ;


mrenglishman

Προτεινόμενες αναρτήσεις

Καλσπέρα σε όλους!

 

Θα ήθελα την βοήθειά σας σε ένα μικρό θεματάκι που έχει προκύψει σε ένα shell scipt (για bash) που γράφω το οποίο αυτοματοποιεί κάποια απλά βήματα μιας διαδικασίας για να παίρνουμε κάθε μέρα κάποια αποτελέσματα που προκύπτουν. Καταρχάς να τονίσω ότι είμαι αρκετά άπειρος όσον αφορά το shell scripting και αυτή είναι η πρώτη μου ουσιαστική προσπάθεια να γράψω κάτι ολοκληρωμένο.

 

Η διαδικασία αυτή περιλαμβάνει σε κάποια φάση της την εκτέλεση 1-2 script που προορίζονται για το tcsh shell και όχι για το bash...μην με ρωτήσετε γιατί κάποιος γράφει σε tcsh και όχι σε bash, εμένα απλά μου ζήτησαν να αυτοματοποιήσω την διαδικασία τους η οποία μάλιστα ξεκινάει γυρίζοντας το shell σε tcsh, ουσιαστικά όμως μόνο για την εκτέλεση αυτών των scripts. Τα υπόλοιπα βήματα έχουν να κάνουν απλα με ένα κατέβασμα αρχείων, edit κάποιων paths σε κάποια config αρχειάκια (διαφορετικών κάθε φορά αναλόγως την ημερομηνία π.χ.), copy σε directories και εκτέλεση καποιων προγραμμάτων...δηλαδή ως επι το πλείστον τυπικές ενέργειες που γίνονται μέσα στο bash.

 

Η ερώτηση λοιπόν είναι: γίνεται ΜΕΣΑ απο το bash script μου να "γυρίσω" προσωρινά σε tcsh, να εκτελέσω το scriptάκι αυτό που μου έχουν δώσει (grib.csh) και μετά να συνεχίζει το bash script μου να κάνει την δουλειά του; Ή ακόμα καλύτερα, γίνεται απλα να εκτελεστεί το tcsh script "μέσα" από το bash ίσα ίσα για αυτή τη δουλεία χωρίς να χρειαστεί να "γυρίσω" εξ'ολοκλήρου σε tcsh; Στην "χειροκίνητη" διαδικασία, γυρνάνε σε tcsh και ύστερα εκτελούν το script αυτό με ./scriptname.csh

 

Από ένα ψάξιμο που έκανα, το να κάνει κάποιος port ενα csh script σε bash script είναι τραγικά δύσκολο και αμφίβολο αν θα δουλέψει...πόσο μάλλον στην περίπτωσή μου που το tcsh script που πρέπει να εκτελείται είναι εξαιρετικά πολύπλοκο.

 

Το script που γράφω ξεκινάει προφανώς με #!/bin/bash. Αυτό που με ενδιαφέρει είναι πώς μπορώ μέσα από το "συγκεντρωτικό" script μου να εκτελέσω αυτό το csh scipt "γυρνώντας" προσωρινά σε tcsh . Υπάρχει μήπως κάποιος τρόπος να εκτλεστεί το csh script "στον αέρα" μέσα από το bash; Κάτι σαν tcsh -arguments scriptname.csh αλλά μετά να παραμείνει στο bash;

 

Ευχαριστώ όλους εκ των προτέρων!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έστω το tcsh script με όνομα test.tcsh που αρχίζει με #!/bin/tcsh ή #!/usr/bin/env tcsh. Αν στο bash script που έχεις δηλώσεις /διαδρομή για το test.tcsh/test.tcsh && δεν το τρέχει σωστά; Ή αν βάλεις tcsh -c "/διαδρομή για το test.tcsh/test.tcsh".

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

OK, quick and dirty λύση.

Τα csh scripts που έχεις προφανώς ξακινάνε με το shebang #!/bin/tcsh.

Αυτό το κάνεις comment και σαν πρώτη εντολή του script δίνεις /bin/tcsh ή όπου βρίσκεται το executable του tcsh (which tcsh για να το βρείς). Στο τέλος του script δίνεις την εντολή exit.

Στο main bash script σου, εκεί που θέλεις να εκτελεστούν αυτά τα tcsh scripts δίνεις την εντολή source /path/to/tcsh_script.

Αυτό πρέπει να κάνει τη δουλειά σου.

Η σωστή λύση βέβαια είναι να γραφτούν όλα για το ίδιο shell.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προφανώς και το σωστό θα ήταν να γραφτού όλα σε bash αλλά έτσι μου τα έχουν δώσει, έτσι πρέπει να τα τρέξω :/

 

Θα δοκιμάσω τις προτάσεις σας και θα επανέλθω...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προφανώς και το σωστό θα ήταν να γραφτού όλα σε bash αλλά έτσι μου τα έχουν δώσει, έτσι πρέπει να τα τρέξω :/

 

Δεν υπάρχει σωστό και λάθος. Το κάθε script είναι ένα πρόγραμμα και ως τέτοιο πρέπει να το αντιμετωπίζεις. Αυτό που θα έπρεπε να σε απασχολεί είναι το πως αλληλεπιδρά με το υπόλοιπο σύστημα. Στην προκειμένη περίπτωση, είτε είναι γραμμένο σε tcsh, είτε σε bash, είτε σε python είτε σε perl, απ' τη στιγμή που έχει το σωστό interpreter στην πρώτη γραμμή (#!/bin/tcsh), μπορείς να το τρέξεις χωρίς να σε απασχολεί το πως δουλεύει εσωτερικά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Άρα θεωρητικά, εφ'οσον έχει το shebang για το tcsh μπορώ να το τρέξω μέσα απο το bash κατευθείαν με ./script.tcsh ? Δεν είμαι στο σπίτι για να το δοκιμάσω, γι'αυτό ρωτάω :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Άρα θεωρητικά, εφ'οσον έχει το shebang για το tcsh μπορώ να το τρέξω μέσα απο το bash κατευθείαν με ./script.tcsh ?

 

Ναι, αρκεί να είναι executable (chmod +x δηλαδή). Εναλλακτικά μπoρείς να τρέξεις και

>
tcsh /path/to/script.tcsh

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...