這並不完全清楚你想要做什麼。顯然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