以下是我的.fluxbox/startup
文件的一部分
(a=($(grep "^1 " $HOME/Documents/4.n3u|awk '{print "/home/g" $2}'|sort -R|head -20)); \
xterm -e mpg123 -C ${a[@]} &>$HOME/Documents/mpg123.dat &)
如上所述,重定向失败,所有此类输出都出现在xterm
中。 xterm
的手册页部分读取
-e program [ arguments ... ]
This option specifies the program (and its command line argu‐
ments) to be run in the xterm window. It also sets the window
title and icon name to be the basename of the program being
executed if neither -T nor -n are given on the command line.
This must be the last option on the command line.
mpg123
根据需要播放数组a的内容,并且可以通过键盘控制-C
选项,但xterm
似乎阻碍了重定向到文件。在这种情况下,重定向是否可行?
或者,我可以在xterm
不包含mpg123
的情况下运行它,在这种情况下我会获得重定向,但无法通过键盘控制mpg123
,因为它在某些背景下运行子shell没有连接键盘。有没有办法建立这种联系?
答案 0 :(得分:1)
您已重定向xterm
进程的stdout和stderr,但xterm通常不会在自己的stdout和stderr上打印任何内容。只会出现与xterm本身相关的错误(例如,如果它意外地丢失了与X服务器的连接)。
xterm创建一个tty并运行子进程(-e
命令或shell),并将stdin,stdout和stderr附加到该tty。您需要将重定向放在-e
中以使其适用于子进程,如下所示:
xterm -e 'your command > whatever'
第二次尝试
为了保持${a[@]}
参数列表不变,但也使用shell重定向运算符,您将不得不使用-c
显式调用shell。像这样:
xterm -e sh -c 'your command "$@" > whatever' dummy "${a[@]}"