这并不完全清楚你想要做什么。显然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
我添加到脚本的顶部。每个可执行脚本应该有一行#!
行来指定它的执行方式。
filename1之前的“/”是什么? – SMA
显示'ls -l filename1 filename2'的输出(如果在当前目录中) –
@SMA'Shell标签' – Deepak