2016-01-24 226 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