2017-12-19 3 views
0

Ich muss Cygwin Bash von einem Tcl-Skript aufrufen und einige Argumente ausführen, kurz nachdem die Bash geöffnet ist. hier ist mein Code:Pass Argumente von Tcl-Skript zu Cygwin Bash

set gitBash "" 

append gitBash "C:/cygwin/bin" 

cd $gitBash 

set command exec 

lappend command "bash.exe" 

lappend command "-c" 

lappend command "cd cygdrive/c/workset" 

Das Problem ist, ich

couldn't execute "exec bash.exe -c {cd cygdrive\c\workset\CASTLE5\2_Castle5_Dev\1_Castle}": no such file or directory 
    while executing 
"exec $command" 

irgendwelche Hinweise diesen Fehler?

+1

Ihr grundsätzliches Problem besteht darin, dass Sie eine Shell starten (versuchen), das Verzeichnis in der Shell ändern und dann die Shell beenden. Das riecht nach einem XY-Problem: Was ist dein eigentliches Ziel? –

Antwort

2

exec akzeptiert nicht alle Argumente als eine einzige Zeichenfolge. Der sicherste Weg, einen Shell-Befehl zu konstruieren ist, eine list zu verwenden:

% set command [list bash -c "cd /some/dir"] 
bash -c {cd /some/dir} 
% eval exec $command 
bash: line 0: cd: /some/dir: No such file or directory 
% exec {*}$command 
bash: line 0: cd: /some/dir: No such file or directory 
% 

beachten, dass die {*} Syntax erfordert Tcl 8.5.

+0

Vielen Dank, jetzt sehe ich den Fehler nicht, aber die Cygwin Bash erscheint nicht. es ist als wäre nichts passiert – IbrahimShazly

+0

@IbrahimShazly Es lief sehr schnell und dann wieder verschwunden (als 'cd' ist ein sehr schneller Befehl auszuführen und einer, dass Sie das Ergebnis sehen, ohne andere Befehle danach zu tun; der Elternprozess _does_ nicht siehe die CD des Kindes. Das Fenster hatte einfach keine Zeit sich zu zeigen und es wurde von deinen Augen/deinem Gehirn registriert, bevor es wieder verschwand. –