如何检测命令输出是否在unix管道中使用

时间:2015-04-29 05:36:38

标签: mysql unix command pipe output

在MySql -e选项中,当输出与管道一起使用时,会打印不同的格式。

没有管道

[root@localhost commands]# $MYSQL_CONNECT_STR -e 'select 0/8'
+--------+
| 0/8    |
+--------+
| 0.0000 |
+--------+

使用Pipe - 无格式化。

[root@localhost commands]# $MYSQL_CONNECT_STR -e 'select 0/8'| more
0/8
0.0000

mysql命令如何检测输出是否会通过管道传递给另一个命令?

2 个答案:

答案 0 :(得分:1)

有一个系统调用来确定文件句柄的特征:

int fstat (int fd, struct stat *buf);

       struct stat {
           dev_t     st_dev;     /* ID of device containing file */
           ino_t     st_ino;     /* inode number */
           mode_t    st_mode;    /* protection */
           nlink_t   st_nlink;   /* number of hard links */
           uid_t     st_uid;     /* user ID of owner */
           gid_t     st_gid;     /* group ID of owner */
           dev_t     st_rdev;    /* device ID (if special file) */
           off_t     st_size;    /* total size, in bytes */
           blksize_t st_blksize; /* blocksize for file system I/O */
           blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
           time_t    st_atime;   /* time of last access */
           time_t    st_mtime;   /* time of last modification */
           time_t    st_ctime;   /* time of last status change */
       };

通过检查st_mode位,程序可以确定它所连接的设备类型。有关详细信息,请参阅man 2 fstat。特别是,有一些宏是系统独立的,以区分常规文件,管道,套接字等。

还有另一个系统调用,用于确定文件连接是否与终端连接:

int isatty(int fd);
  

说明         isatty()函数测试fd是否是引用终端的打开文件描述符。

     

返回值         如果fd是引用终端的打开文件描述符,则isatty()返回1;否则返回0,并设置errno以指示错误。

答案 1 :(得分:0)