zoukankan      html  css  js  c++  java
  • Linux命令--- /dev/null和/dev/tty

    特殊文件: /dev/null和/dev/tty

        Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty。其中/dev/null将会丢掉所有写入它的数 据,换句换说,当程序将数据写入到此文件时,会认为它已经成功完成写入数据的操作,但实际上什么事都没有做。如果你需要的是命令的退出状态,而非它的输 出,此功能会非常有用,见如下Shell代码:
        /> vi test_dev_null.sh
        
        #!/bin/bash
        if grep hello TestFile > /dev/null
        then
            echo "Found"
        else
            echo "NOT Found"
        fi
        在vi中保存并退出后执行以下命令:
        /> chmod +x test_dev_null.sh  #使该文件成为可执行文件
        /> cat > TestFile
        hello my friend
        CTRL + D                             #退出命令行文件编辑状态
        /> ./test_dev_null.sh
        Found                                 #这里并没有输出grep命令的执行结果。
        将以上Shell脚本做如下修改:
        /> vi test_dev_null.sh
        
        #!/bin/bash
        if grep hello TestFile
        then
            echo "Found"
        else
            echo "NOT Found"
        fi
        在vi中保存退出后,再次执行该脚本:
        /> ./test_dev_null.sh
        hello my friend                      #grep命令的执行结果被输出了。
        Found
        
        下面我们再来看/dev/tty的用途。当程序打开此文件时,Linux会自动将它重定向到一个终端窗口,因此该文件对于读取人工输入时特别有用。见如下Shell代码:
        /> vi test_dev_tty.sh
        
        #!/bin/bash
        printf "Enter new password: "    #提示输入
        stty -echo                               #关闭自动打印输入字符的功能
        read password < /dev/tty         #读取密码
        printf " Enter again: "             #换行后提示再输入一次
        read password2 < /dev/tty       #再读取一次以确认
        printf " "                               #换行
        stty echo                                #记着打开自动打印输入字符的功能
        echo "Password = " $password #输出读入变量
        echo "Password2 = " $password2
        echo "All Done"

        在vi中保存并退出后执行以下命令:
        /> chmod +x test_dev_tty.sh #使该文件成为可执行文件
        /> ./test_dev_tty
        Enter new password:             #这里密码的输入被读入到脚本中的password变量
        Enter again:                          #这里密码的输入被读入到脚本中的password2变量
        Password = hello
        Password2 = hello
        All Done

  • 相关阅读:
    如何理解联合文件系统?
    Docker 学习笔记(一)
    Bzoj 3124: [Sdoi2013]直径 题解
    Bzoj 3131 [Sdoi2013]淘金 题解
    欧拉路(题目)
    硬币问题
    线段树、树状数组
    Splay树、Treap树
    模拟退火
    广搜题目(一本通)
  • 原文地址:https://www.cnblogs.com/tianzhiyi/p/5312015.html
Copyright © 2011-2022 走看看