Unix - 权限被拒绝
我在Unix中创建了两个文件,说filename1
和filename2
。我能够看到这两个文件的内容。但是当我执行一个命令时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
运行
chmod +x filename1
chmod +w filename2
需要检查你撞设定为好。这取决于正在使用的外壳。去谷歌上查询!
编辑
对于bash
set +o noclobber
然后就可以覆盖文件。不是一个好主意
为什么它没用 - 为脚本设置执行位? –
@Ed Heal bash shell – Deepak
@EdHeal:没关系,我没有注意到'filename1'是一个可执行文件。我会删除我以前的评论。 –
这并不完全清楚你想要做什么。显然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
我添加到脚本的顶部。每个可执行脚本应该有一行#!
行来指定它的执行方式。
非常感谢。我理解了这个问题,以及我在哪里做错了。由于我刚开始学习Unix,我无法理解该命令的输出。 – Deepak
filename1之前的“/”是什么? – SMA
显示'ls -l filename1 filename2'的输出(如果在当前目录中) –
@SMA'Shell标签' – Deepak