文件重定向至脚本 tty命令妙用

前两天遇到一个很棘手的问题:
我有一个shell脚本,例如test.sh
执行的时候不接收参数或者接收文件重定向两种方式
./test.sh
or
./test.sh < test.txt

 

看似简单的要求,但是理想与现实之间总是会有差距,以为使用一些位置变量$1,$2或特定变量$#等就可以搞定

但是发现这两种情况的值完全一样,以至于无法区分这两种情况.($#均为0,$1,2等均为空,cat $1时不重定向时会阻塞等)

 

询问了CSDN上的大虾,终于搞定,tty命令大展身手。

 

$ man tty

 

 

NAME

       tty - print the file name of the terminal connected to standard input(打印与标准输入设备连接的终端名称,翻译的有问题的请指出来)

 

SYNOPSIS

       tty [OPTION]...

 

DESCRIPTION

       Print the file name of the terminal connected to standard input.

 

       -s, --silent, --quiet

              print nothing, only return an exit status(不打印名称,直返回一个退出状态,退出状态我查了一下,0--标准输入是一个终端,1--标准输入不是终端,2--传递了错误参数,3--写入错误产生)

 

 

 

一下处理就能区分出那两种情况了

test.sh

 

#!/bin/sh

tty -s
if [ $? -ne 0 ]; then
echo "输入重定向"
else
echo "no重定向"
fi


or


if [ "$(tty)" != "not a tty" ]; then  

   echo "it's a terminal"  

else

   echo "not a terminal"

fi

 

怎么样,很巧妙吧。

 

当然

$ tty 

/dev/pts/1

 

打印出了当前终端的ID,后面的数字1是系统分配的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值