2016-04-06 13 views
0

Ist es möglich, ein CSH-Skript in Makefile zu finden, da ich die Mehrheit der Zielbefehle in SH habe, und ich möchte die globale Shell von Makefile nicht in CSH ändern? In meinem Make-Datei, ich brauche so etwas wie dies zu tun:Wie kann ich ein CSH-Skript mit Argumenten im Makefile-Ziel bereitstellen?

myTarget:  
    source specialPreCshellScript.csh 
    some_SH_steps ... 
    source specialPostCshellScript.csh 

Danke

+0

Was machen die 'csh' Skripte? Sind sie mit 'sh' kompatibel? –

+0

"Sourcing" sie macht überhaupt keinen Sinn. In Ihrem Beispiel wird die Shell, die die erste 'source 'ausführt, beendet, wodurch alle möglichen Vorteile von' source 'verloren gehen. Wenn das Ziel darin besteht, einige Variablen, vielleicht am Ende des 'csh'-Skripts, zu setzen, drucken Sie die Werte als variable Zuweisungen in der' sh'-Syntax aus, und beziehen Sie sie von Make. – tripleee

Antwort

1

Wenn das Ziel ist einfach die Befehle in der csh Skript auszuführen und erhalten keine Ergebnisse zurück, gibt es keine Notwendigkeit, zu source es.

Wenn Sie etwas zurückbekommen müssen - z. die Werte einiger Variablen - mein Vorschlag wäre zwei Schreiben eines csh Wrapper-Skript, das diese Variablen als sh -kompatible Zuordnungen druckt.

#!/bin/csh -f 
source specialPreCshellScript.csh 
printf "%s=%s\n" variable1 "$variable1" another "$another" third "$third" 

Nennen Sie es, wie

eval $(csh_wrapper_script); ... do stuff with the variables 

Wegen, wie funktioniert Stellen (Standardeinstellung), um die Einstellungen, die Sie eval erhalten gehen verloren, wenn die Befehlszeile beendet. Also in Ihrem Beispiel some_SH_steps keinen Zugriff auf das Ergebnis aus csh haben, wenn Sie es zwingen, in der gleichen Befehlszeile auszuführen, vielleicht so:

eval $(csh_wrapper_script); some_SH_steps 

und ähnlich tack auf einem Wrapper für den zweiten csh Skript nach some_SH_steps wenn Sie das im selben Kontext auch brauchen.

+0

Ich könnte einige geeignete Schimpfwörter für den Autor der 'csh' Skripte vorschlagen, aber vielleicht wäre das passender auf https://english.stackexchange.com – tripleee

+0

Das' printf' geht davon aus, dass die Variablenwerte kein Leerzeichen enthalten oder Shell-Metazeichen. Ich stelle mir vor, dass es vielleicht einen eleganteren Weg geben würde, die Werte herauszuholen, ohne den Variablennamen zu wiederholen, aber ich habe nicht vor, 'csh' neu zu lernen. – tripleee