/ bin / script并重定向stderr

时间:2017-11-07 17:36:02

标签: bash

我使用/ bin / script来捕获命令的输出并保留颜色和格式。使用subshel​​l并赋值给变量并不总是有效。 。E.g,:

(defn entry? [entry]
  (let [foo (get entry "foo")
        bar (get entry "bar")]
    (and (some? foo)
         (some? bar))))

(defn create-entry [doc]
  (let [id (str (UUID/randomUUID)) timestamp (quot (System/currentTimeMillis) 1000)]
    (let [entry (assoc doc "id" id "timestamp" timestamp)]
      (if (entry? entry)
        (prn "hello!")
        (response {:err "either foo or bar is required"})))))

我可以使用/ bin / script来捕获stdout:

foo="$( ls --color 2>&1 )"

我可以使用/ bin / script来捕获stderr(ls的不存在的目录转到stderr):

$ script -qc "echo foo" >& /dev/null && cat typescript
Script started on Mon 06 Nov 2017 10:40:40 PM PST
foo

当脚本在带有文件描述符的/ bin / script内部运行时,我的问题就出现了。

我无法使用/ bin / script捕获重定向的stderr:

$ script -qc "ls vxzcvcxvc" >& /dev/null && cat typescript
Script started on Mon 06 Nov 2017 10:38:17 PM PST
ls: cannot access vxzcvcxvc: No such file or directory

我也尝试了其他方法:

$ script -qc "ls vxzcvcxvc 2>&1" >& /dev/null && cat typescript
Script started on Mon 06 Nov 2017 10:47:13 PM PST

我假设/ bin / script正在执行自己的文件描述符魔术(将输出重定向到文件),所以我想知道如果我调用的脚本执行自己的重定向该怎么办。

切向问题:主要罪魁祸首是

的记录行
$ script -qc "echo foo1 && >&2 echo foo2 && echo foo3" >& /dev/null && cat typescript
Script started on Mon 06 Nov 2017 10:46:09 PM PST
foo1
foo3

以便将记录打印到stderr。有没有办法输出到stderr而不会弄乱文件描述符(假设这是/ bin / script无法获取它的原因)?

0 个答案:

没有答案