Verwendung von Bash-Befehlen in geschachtelten Schleifen in Makefile

548
Umar

Ich möchte Bash-Befehle in geschachtelten Schleifen in Makefile verwenden, mein aktueller Code funktioniert nicht. Kann mir jemand helfen was das Problem sein kann. Ich habe einen einfachen Code in Testziel geschrieben. Hier möchte ich in ein Verzeichnis DIR_S / case1 gehen und die Datei rtt.csv in ein anderes Verzeichnis DIR_D / rtt / kopieren.

test:  cn=1; while [[ $$cn -le 2 ]] ; do \ echo $$cn ; \ ((cd $(DIR_S)/case\ $$cn)) ; \ ((cp rtt.csv $(DIR_D)/rtt/)) ; \ ((cn = cn + 1)) ; \ done 

Es gibt keinen Fehler, wenn ich das ausführen, aber ich sehe diese Nachricht und die Zeile wird nicht ausgeführt

/bin/sh: ((: cd /Users/Umar/Desktop/dummy1/case 1: division by 0 (error token is "/Umar/Desktop/dummy1/case 1") 

Eine Sache, die ich bemerkte, war der Typ

cd /Users/Umar/Desktop/dummy1/case 1 

In der Befehlszeile wird es aus Platzgründen nicht funktionieren, ich habe auch die obige Zeile von aktualisiert

((cd $(DIR_S)/case\ $$cn)) ; \ 

zu

((cd $(DIR_S)/case\\ $$cn)) ; \ 

aber diese Zeile wird immer noch nicht ausgeführt. Kann mir jemand helfen, wie man Bash-Befehle in verschachtelten Schleifen in Makefile verwendet? (Ich habe geschachtelte Schleifen erwähnt, da ich beabsichtige, nach dieser Schleife eine weitere Schleife hinzuzufügen.)

0

1 Antwort auf die Frage

0
Umar

Das Problem schien gelöst zu sein, wenn ich bash-Befehle ohne ((und)) verwende.

Die Verwendung von ((`ist für _arithmetic_, während` (`für _subshell_ ist.) Die Verwendung von single ((') ist schön, wenn Sie das Verzeichnis wechseln und bedingungslos an die richtige Stelle am Ende der Subshell zurückkehren möchten. Denken Sie daran, dass die Arithmetik ausgeführt wird in subshell geht verloren, wenn subshell zurückkehrt ... levif vor 8 Jahren 0