- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我最近从 CentOS 5.8(使用 GNU bash 3.2.25)升级到 CentOS 6.5(使用 GNU bash 4.1.2)。用于 CentOS 5.8 的命令不再适用于 CentOS 6.5。这是一个简单的解决方法的愚蠢示例,但我试图了解导致不同行为的 bash 引擎盖下发生的事情。也许这是 bash 4.1.2 中的一个新错误,或者是一个已修复的旧错误,新行为是预期的?
中央操作系统 5.8:
(echo "hi" > /dev/stdout) > test.txt
echo $?
0
cat test.txt
hi
CentOS 6.5:
(echo "hi" > /dev/stdout) > test.txt
-bash: /dev/stdout: Not a directory
echo $?
1
更新:看起来这不是与 CentOS 版本相关的问题。我有另一台运行该命令的 CentOS 6.5 机器。我已经消除了任何环境变量作为罪魁祸首。有任何想法吗?在所有机器上,这些命令给出相同的输出:
ls -ld /dev/stdout
lrwxrwxrwx 1 root root 15 Apr 30 13:30 /dev/stdout -> /proc/self/fd/1
ls -lL /dev/stdout
crw--w---- 1 user1 tty 136, 0 Oct 28 23:21 /dev/stdout
另一个更新:子 shell 似乎继承了父 shell 的重定向标准输出。我想这并不太令人惊讶,但为什么它在一台机器上工作,但在另一台机器上运行相同的 bash 版本时却失败了?
在工作机器上:
((ls -la /dev/stdout; ls -la /proc/self/fd/1) >/dev/stdout) > test.txt
cat test.txt
lrwxrwxrwx 1 root root 15 Aug 13 08:14 /dev/stdout -> /proc/self/fd/1
l-wx------ 1 user1 aladdin 64 Oct 29 06:54 /proc/self/fd/1 -> /home/user1/test.txt
我认为 Yu Huang 是对的,重定向到/tmp 在两台机器上都有效。两台机器都将 isilon NAS 用于/home 挂载,但可能其中一台的文件系统版本或配置略有不同,这导致了错误。总之,除非您知道父进程不会重定向它,否则应避免重定向到/dev/stdout。
更新:从 v3 升级到 NFS v4 后出现此问题。降级回 v3 后,此行为消失了。
最佳答案
早上好,user1999165,:)
我怀疑它与底层文件系统有关。在同一台机器上,尝试:
(echo "hi" > /dev/stdout) > /tmp/test.txt
/tmp/ 应该是 linux 原生(ext3 或其他)文件系统
关于linux - bash 重定向到/dev/stdout : Not a directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26623626/
我是一名优秀的程序员,十分优秀!