1

我正在尝试使用 tcl 将某个文件从我的 Linux PC 上的一个目的地复制到另一个目的地。我正在使用的命令是

{file copy -force $fileToCopy $destination}

但是,我没有执行此操作的正确权限。我尝试使用以下方法更改权限:

{file attributes $fileToCopy -permissions rwxrwxrwx}

我收到一条错误消息,提示我无法更改权限,因为我不是所有者。所以,我尝试使用更改文件的所有者

{file attributes $fileToCopy -owner ${::tcl_platform(user)}}

我收到了同样的错误消息,说我不能更改所有者,因为我不是所有者。

我该如何解决这个问题?有没有办法在 tcl 的 sudo 下运行这个命令,以便我能够复制文件?

4

1 回答 1

2

只要您对文件具有读取权限(并且对包含它的所有目录(直到根目录)具有读取执行权限),您就应该能够读取file copy它。您还必须对目标具有写入权限。(显然!)设置文件的权限要求您是文件的所有者或 root,设置文件的所有权需要更高的权限(几乎只能由 root 或 setuid 的代码完成根)。在内部,file copy尝试复制文件的这些功能以及内容,但如果失败也不会抛出错误。

虽然可以进行 setuid 工作(通过 TclX 扩展的id命令),但这需要非常不寻常的配置。实际上,使用 sudo 启动以 root 身份运行的 Tcl 解释器要容易得多。

我猜您要么无法读取文件,要么无法写入目的地。file readable $fileToCopy用(只是为了确定!)检查第一个,用file writable $destination. (请注意,由于潜在的竞争条件和access()某些文件系统的系统调用的神秘陌生性,这些并没有给出明确的答案。但它们非常表明正在发生的事情,真正的问题是什么。)

于 2013-06-03T20:07:17.193 回答