2015-09-29 49 views
0

当我在工作时,我需要经常更改目录。所以,我写了一个这样的小代码,但它不起作用。使用TK更改终端运行目录

#!/usr/bin/wish 
button .exit -text exit -command {exit} 
pack .exit -padx 20 -pady 10 

button .dir1 -text e1_b_r1_IcPlace -command {exec cd ..} 
pack .dir1 -padx 20 -pady 10 

显示错误上面的代码:

couldn't execute "cd": no such file or directory

+2

'cd' * *是一个命令,你不前,不需要任何'exec'。 –

+1

你不能做你想做的事:一个子进程不能改变父进程的环境。 'cd'命令内置在shell中,并且你的希望程序不能改变产生它的shell。如果你编写一个结合Tk和Expect的Tcl程序,你可以产生一个shell并用GUI控制它。 –

回答

1

exec命令开始执行系统命令或运行脚本文件的新工艺。你不需要它来调用cd命令,只是命令本身:

button .dir1 -text e1_b_r1_IcPlace -command {cd ..} 

如果你想在创建按钮你可以使用这样的事情时指定一个目录

button .dir1 -text e1_b_r1_IcPlace -command [list cd $dir] 

如果你想在该按钮被调用时要指定的目录,这是做这件事:

entry .dir1ent -textvariable dir 
button .dir1 -text e1_b_r1_IcPlace -command {cd $dir} 

大括号保持变量dir不被替换,直到调用该按钮,此时调用cd,并将入口小部件的当前文本作为参数进行调用。

更新:正如glenn jackman所说,这段代码只会影响自己的进程,并且不能以这种形式作为普通shell的“远程控制”。但是,如果您使用tkcon作为命令shell并从中启动此代码,则按钮更改为shell中的工作目录。

文档:buttoncdentryexeclist