官术网_书友最值得收藏!

Redirection

When a file descriptor is assigned to something other than a terminal, this is called I/O redirection. The shell performs the redirection of output to a file by closing the standard output file descriptor 1 (the Terminal) and then assigning that descriptor to the file. When redirecting standard input, the shell closes file descriptor 0 (the Terminal) and assigns that descriptor to a file. The Bash shells handle errors by assigning a file to file descriptor 2.The following command will take input from the sample.txt file:

    $ wc  <  sample.txt  

The preceding command will take content from the sample.text file. The wc command will print the number of lines, words, and characters in the sample.txt file. This command will redirect output to be saved in the log.txt file:

    $ echo "Hello world" > log.txt
  

This command will append the Hello World text to the log.txt file:

    $ echo "Welcome to Shell Scripting" >> log.txt

The single > will overwrite or replace the existing text in the log file, and double >> will append the text to the log file. Let's see a few more examples:

    $ tr '[A-Z]' '[a-z]' < sample.txt

The preceding tr command will read text from the sample.txt file. The tr command will convert all uppercase letters to lowercase letters and will print the converted text on screen:

    $ ls > log.txt
    $ cat log.txt

The output of the command is as follows:

    dir_1
    sample.txt
    extra.file

In this example command, ls sends directory content to file log.txt. Whenever we want to store the result of the command in the file, we can use the preceding example.

    $ date >> log.txt
    $ cat log.txt

The output is as follows:

    dir_1
    dir_2
    file_1
    file_2
    file_3
    Sun Sept 17 12:57:22 PDT 2004

In the preceding example, we redirect and append the result of the date command to the log.txt file.

    $ gcc hello.c 2> error_file

The gcc is a C language compiler program. If an error is encountered during compilation, then it will be redirected to error_file. The > character is used for a success result and 2> is used for error-result redirection. We can use error_file for debugging purposes:

    $ find . -name "*.sh" > success_file 2> /dev/null

In the preceding example, we redirect output or success results to success_file, and errors to /dev/null. /dev/null is used to destroy the data, which we do not want to be shown on screen.

    $ find . -name "*.sh" &> log.txt

The preceding command will redirect both output and errors to log.txt.

    $ find . -name "*.sh"  > log.tx 2>&1

The preceding command will redirect the result to log.txt and send errors to where the output goes, such as log.txt.

    $ echo "File needs an argument" 1>&2

The preceding command will send standard output to the standard error. This will merge the output with the standard errors. A summary of all I/O redirection commands is as follows:

Run the following command:

    $ touch filea fileb filec fileab filebc filead filebd filead
    $ touch file{1,2,3}
  

Try out the following command:

    $ ls  s*
    $ ls  file
    $ ls  file[abc]
    $ ls  file[abc][cd]
    $ ls  file[^bc]
    $ touch file file1 file2 file3 ... file20
    $ ls ?????
    file1
    file2
    file3
    $ ls file*
    file file1 file10 file2 file3
    $ ls file[0-9]
    file1 file2 file3
    $ ls file[0-9]*
    file1 file10 file2 file3
    $ ls file[!1-2]
    file3
  
主站蜘蛛池模板: 禄丰县| 阜南县| 西贡区| 运城市| 贺兰县| 浦北县| 南宫市| 仁化县| 永仁县| 朝阳区| 北流市| 远安县| 都江堰市| 北川| 徐汇区| 永泰县| 湖州市| 义乌市| 措勤县| 富源县| 云阳县| 远安县| 鄂托克前旗| 洪洞县| 天柱县| 雅江县| 康定县| 苏尼特左旗| 永靖县| 上思县| 台中县| 新竹县| 淳安县| 正阳县| 天水市| 白朗县| 昔阳县| 临高县| 武乡县| 永定县| 荣昌县|