我创建了一个文件夹ABC。在这个文件夹中,我创建了两个文件,file1和file2。接下来在文件夹中我为每个人设置了rw权限。当我尝试ls ABC
时,它会打印出来:
/bin/ls: cannot access ABC/file2: Permission denied
/bin/ls: cannot access ABC/file1: Permission denied
file1 file2
我想将此消息拆分为两部分,并写入文件success.txt和fail.txt。所以在Bash中,我尝试过类似的东西:
ls ABC > success.txt 2> fail.txt
但是在success.txt中我有“file1 file2”,但是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 :(得分: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 :(得分:1)
我认为您的系统ls
配置为在输出到终端时使用颜色代码(通过环境变量,别名或功能)。如果需要颜色,ls
将lstat
每个需要目录搜索权限的文件。只列出文件名称不需要搜索权限。