首页 > 解决方案 > 如何使用 bash 写入除现有常规文件之外的任何文件?

问题描述

我做了以下尝试..徒劳无功:

  1. hello.sh 使用“test -f”
#! /bin/bash
test -f $1 && exit 1 || echo "hello" > $1

可惜$ ./hello.sh /dev/stdout > non_existent没有写。

  1. hello2.sh 使用“set -C”
#! /bin/bash
set -C; echo "hello" > $1

此外,$ ./hello2.sh /dev/stdout > non_existent仍然无法正常工作。

我猜在重定向时, bash callsfreopen("/dev/stdout", "w", $1)会错误地使/dev/stdout看起来像一个现有的常规文件。

我该如何解决这个问题?

标签: linuxbashshell

解决方案


是的,只需在(仅)测试期间关闭标准文件描述符:

$ test -f /dev/stdout <&- >&- 2>&-
$ echo $?
1

推荐阅读