Unix - 权限被拒绝

时间:2016-01-24 15:48:31

标签: unix

我在Unix中创建了两个文件,比如filename1filename2。我能够看到两个文件的内容。但是当我执行一个命令时

filename1 >& filename2

我无法打开文件filename2。抛出错误

/.filename1 : Permission denied.

完整代码:

bash-4.3$ cat>filename1
Hi all
bash-4.3$ cat> filename2
Hi all
bash-4.3$ cat filename1
Hi all
bash-4.3$ cat filename2
Hi all
bash-4.3$ filename1 >& filename2
bash-4.3$ cat filename1
Hi all
bash-4.3$ cat filename2
bash: ./filename1:Permission denied

2 个答案:

答案 0 :(得分:0)

运行

chmod +x filename1
chmod +w filename2

还需要检查您的clobber设置。这取决于所使用的shell。谷歌吧!

修改

对于bash

set +o noclobber

然后你可以覆盖文件。不是一个好主意

答案 1 :(得分:0)

一点也不清楚你要做什么。显然filename1是(可能是)可执行的shell脚本。 filename2包含执行该脚本的输出。

bash-4.3$ cat>filename1
Hi all

这会创建一个名为filename1的文件,其中包含一行文字Hi all

bash-4.3$ cat> filename2
Hi all

filename2也一样。

bash-4.3$ cat filename1
Hi all
bash-4.3$ cat filename2
Hi all

并验证其内容。

bash-4.3$ filename1 >& filename2

这会尝试执行filename1,将其stdout和stderr重定向到filename2

由于您尚未执行chmod +x filename1,因此在尝试执行时会出现“权限被拒绝”错误。即使你已经完成chmod,它也行不通,因为filename1不是一个有效的脚本(除非你碰巧有一个名为Hi的命令)。更多关于以下内容。

bash-4.3$ cat filename1
Hi all
bash-4.3$ cat filename2
bash: ./filename1:Permission denied

filename2包含您尝试执行filename1时获得的输出(无)和错误消息。 filename2的先前内容遭到破坏,这意味着首先创建它是没有意义的。

Bash确实支持>&语法来重定向stdout和stderr,但不建议这样做。 &>是首选(至少根据bash文档)。或者,更明确地说,您可以编写filename1 >filename2 2>&1

您只需输入filename1即可执行该脚本这一事实表明您的.中有$PATH当前目录。这是个坏主意。 (.前面$PATH特别危险。)您应该从.删除$PATH;如果要在当前目录中执行命令,请在其前面添加./

以下是关于您似乎尝试做的类似的事情:

$ cat > script
#!/bin/bash

echo Hi all
$ chmod +x script
$ ./script &> output
$ cat output
Hi all
$ 

请注意我添加到脚本顶部的#!/bin/bash。每个可执行脚本都应该有一个#!行来指定它的执行方式。