我在Unix中创建了两个文件,比如filename1
和filename2
。我能够看到两个文件的内容。但是当我执行一个命令时
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 :(得分: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
。每个可执行脚本都应该有一个#!
行来指定它的执行方式。