2016-01-24 228 views
-3

我在Unix中创建了两个文件,说filename1filename2。我能够看到这两个文件的内容。但是当我执行一个命令时Unix - 权限被拒绝

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 
+0

filename1之前的“/”是什么? – SMA

+0

显示'ls -l filename1 filename2'的输出(如果在当前目录中) –

+0

@SMA'Shell标签' – Deepak

回答

0

运行

chmod +x filename1 
chmod +w filename2 

需要检查你撞设定为好。这取决于正在使用的外壳。去谷歌上查询!

编辑

对于bash

set +o noclobber 

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

+0

为什么它没用 - 为脚本设置执行位? –

+0

@Ed Heal bash shell – Deepak

+0

@EdHeal:没关系,我没有注意到'filename1'是一个可执行文件。我会删除我以前的评论。 –

0

这并不完全清楚你想要做什么。显然filename1是(打算是)一个可执行的shell脚本。 filename2包含执行该脚本的输出。

bash-4.3$ cat>filename1 
Hi all 

这将创建一个包含文本的单行线,Hi all命名为filename1文件。

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,它的两个输出和错误重定向到filename2

由于您还没有完成chmod +x filename1,当您尝试执行它时,您会收到“Permission denied”错误。即使您已经完成了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我添加到脚本的顶部。每个可执行脚本应该有一行#!行来指定它的执行方式。

+0

非常感谢。我理解了这个问题,以及我在哪里做错了。由于我刚开始学习Unix,我无法理解该命令的输出。 – Deepak