2011-12-02 100 views
0

我創建了一個文件夾ABC。在這個文件夾中,我創建了兩個文件file1和file2。接下來在文件夾中,我爲每個人設置了rw權限。當我嘗試ls ABC它打印:在Unix上重定向標準錯誤輸出

/bin/ls: cannot access ABC/file2: Permission denied 

/bin/ls: cannot access ABC/file1: Permission denied 

file1 file2 

我想這個消息分成兩個部分,並寫入文件success.txt和fail.txt。因此,在猛砸,我想是這樣的:

ls ABC > success.txt 2> fail.txt 

但success.txt我有「文件1文件2」,但fail.txt是空的,所以這裏是消息的頭兩行?


感謝Arne和shellter爲您的利益。所以,我創建文件夾:

mkdir ABC 

下一頁:

cd ABC 
touch file1 file2 

下一頁:

cd .. 
chmod 666 ABC 

當我進入ls ABC我得到:

/bin/ls: cannot access ABC/file2: Permission denied 

/bin/ls: cannot access ABC/file1: Permission denied 

file1 file2 

但我當寫一個sh腳本,如:

#!/bin/sh 
$* > success.txt 2> fail txt 

fail.txt爲空。爲什麼?我補充說,在另一種情況下一切正常,所以問題只出現在命令在sterr和stdout上打印信息的地方。

+0

我無法重現您的情況。重定向適合我。如果你能夠準確地寫下你是如何創建文件夾和文件的話,這將會有所幫助。 – Arne

+0

,如果在腳本中(這是一個編程問題,對嗎?)添加類似'ls -l ABC/*'和'umask'的調試輸出,然後修改上面的問題以包含這些命令的輸出。也許你還應該編輯你的文章以包含腳本的相關部分。祝你好運。 – shellter

回答

1

我相信你有ls定義爲別名或shell函數。你有什麼樣

alias ls='/bin/ls -l' 
在你的啓動文件中

.bashrc.bash_profile)?

什麼是

type -a ls 

輸出?

ls ABC本身不應該給你那些錯誤信息; 666目錄權限不會阻止它列出文件的名稱。嘗試/bin/ls ABC來確認這一點。

您的別名或函數在shell腳本中不可見。

將stdout指向一個文件和stderr到另一個文件的語法是正確的。你只是運行一個不寫任何stderr的命令。

順便說一句,在目錄上設置666權限很少有意義。

1

我認爲你的系統有ls配置爲當輸出到終端(通過環境變量,別名或功能)時使用顏色代碼。如果需要顏色,lslstat每個文件需要對目錄的搜索權限。只列出文件的名稱不需要搜索權限。

+1

這似乎是合理的 - 除了那麼我希望錯誤消息以'ls:'開頭,而不是'/ bin/ls:'。我認爲'ls'是一個調用'/ bin/ls'的函數或別名。 –

相關問題