我正在尝试使用tcl将某个文件从我的Linux PC上的一个目标复制到另一个目标。我正在使用的命令是
{file copy -force $fileToCopy $destination}
但是,我没有正确的权限来执行此操作。我尝试使用以下方法更改权限:
{file attributes $fileToCopy -permissions rwxrwxrwx}
我收到一条错误消息,说我无法更改权限,因为我不是所有者。所以,我尝试使用
更改文件的所有者{file attributes $fileToCopy -owner ${::tcl_platform(user)}}
我收到了同样的错误消息,说我无法更改所有者,因为我不是所有者。
如何解决这个问题?有没有办法在tcl下的sudo下运行这个命令,以便我能够复制文件?
答案 0 :(得分:2)
只要您对该文件具有读取权限(并且读取和执行权限)包含它的所有目录根目录)你应该能够file copy
它。您还必须对目标具有写入权限。 (显然!)设置文件的权限要求您是文件或root的所有者,设置文件的所有权需要更高的权限(它几乎只由root或setuid的代码完成)根)。在内部,file copy
尝试复制文件的这些功能以及内容,但如果失败则不会引发错误。
虽然可以进行setuid工作(通过TclX扩展的id
命令),但这需要一个非常不寻常的配置。实际上,使用sudo启动以root身份运行的Tcl解释器要容易得多。
我猜你要么无法读取文件,要么无法写入目的地。用file readable $fileToCopy
检查第一个(只是为了确定!),然后用file writable $destination
检查后者。 (请注意,由于竞争条件的可能性以及access()
系统调用对某些文件系统的陌生感,这些并没有给出明确的答案。但它们非常能说明发生了什么,真正的问题是什么。)