0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

shell腳本基礎(chǔ):重定向和管道符

FPGA學(xué)姐 ? 來(lái)源:FPGA學(xué)姐 ? 2023-05-04 11:09 ? 次閱讀

重定向符

一、輸出重定向

標(biāo)準(zhǔn)輸出的目標(biāo)位置通常指向的是終端屏幕??梢允褂?符號(hào)修改標(biāo)準(zhǔn)輸出的目標(biāo)位置。比如下面的示例就會(huì)將ps命令的輸出重定向到result.txt文件。描述符和>之間不能有空格

$ ps > result.txt  ←----- 由于已經(jīng)重定向到 result.txt 文件,所以屏幕上不會(huì)輸出任何內(nèi)容
$ cat result.txt
  PID TTY          TIME CMD
10745 pts/0    0000 bash
10873 pts/0    0000 ps

如果文件已經(jīng)存在,則該文件會(huì)被覆蓋,文件內(nèi)容將丟失

如果不想使用>覆蓋原文件,而想向原文件追加寫入,可以使用>>重定向

$ echo line1 >> echo.txt
$ echo line2 >> echo.txt
$ echo line3 >> echo.txt
$ cat echo.txt
line1
line2
line3

重定向并不是命令的功能,而是shell的功能,只要命令能將執(zhí)行結(jié)果輸出到標(biāo)準(zhǔn)輸出,就可以實(shí)現(xiàn)重定向。但是只有標(biāo)準(zhǔn)輸出會(huì)被重定向,標(biāo)準(zhǔn)錯(cuò)誤輸出還是會(huì)直接顯示到屏幕上,那么如何將錯(cuò)誤輸出重定向?

可以使用2>符號(hào),數(shù)字2是稱為文件描述符的編號(hào)

$ ls /xxx 2> error.txt
$ cat error.txt
ls: 無(wú)法訪問(wèn)'/xxx': 沒(méi)有那個(gè)文件或目錄

0edc28de-e633-11ed-ab56-dac502259ad0.png

也就是說(shuō)例子1中相當(dāng)于是1>

或者2>>指令對(duì)錯(cuò)誤進(jìn)行重定向

$ ls /xxx 2>> error.txt
$ cd /xxx 2>> error.txt
$ cat error.txt
ls: 無(wú)法訪問(wèn) '/xxx': 沒(méi)有那個(gè)文件或目錄
-bash:cd:/xxx:沒(méi)有那個(gè)文件或目錄

標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到同一個(gè)文件(n>&m的含義是將文件描述符n設(shè)置為文件描述符m的副本)

$ ls /usr /xxx > ls_result.txt 2>&1

輸出到不同文件(將ls命令的標(biāo)準(zhǔn)輸出重定向到result.txt文件,并將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到error.txt文件)

$ ls /usr /xxx > result.txt 2> error.txt

使用分組命令重定向(如果想在使用{ }時(shí)將多條命令寫到一行,需要在每條命令后面加上;)

#!/bin/bash
{
    date +%Y-%m-%d
    echo '/usr list'
    ls /usr
} > result.txt
#------------------------------------------------------------
$ { date +%Y-%m-%d; echo '/usr list'; ls /usr; } > result.txt

分組命令的{后面要有空格,還可以使用( )代替{ }

二、輸入重定向

$ tr b B
abcd←-----從鍵盤輸ru
aBcd     ←----- b 被替換為 B
my book  ←----- 從鍵盤輸入
my Book  ←----- b 被替換為 B

tr命令對(duì)鍵盤輸入的東西進(jìn)行替換吧

$ cat word.txt
abcd                 ←----- word.txt 文件的內(nèi)容
my book
$trbB

管道

命令的輸出內(nèi)容除了可以重定向輸出到文件,還可以作為其他命令的輸入使用。

使用less命令顯示ls命令的標(biāo)準(zhǔn)輸出內(nèi)容

$ ls | less
...            <-----(本行及以下5行)less 命令輸出示例
Documents      
Movies         
Music          
Public         
(END)

等效于

$ ls > result.txt
$ less < result.txt

注意:管道只會(huì)將前一條命令的標(biāo)準(zhǔn)輸出傳遞給之后的命令,而第1條命令的標(biāo)準(zhǔn)錯(cuò)誤輸出則不會(huì)傳遞給后面的命令。

$ ls /usr/bin | grep 'py' | wc -l
6

如果使用管道來(lái)連接一個(gè)同時(shí)顯示標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出的命令,那么屏幕上將只顯示標(biāo)準(zhǔn)錯(cuò)誤輸出的內(nèi)容。如果想將標(biāo)準(zhǔn)錯(cuò)誤輸出和標(biāo)準(zhǔn)輸出一起傳遞給后面的命令,那么使用前面介紹的2>&1這種重定向方式即可

$ ls /usr /xxx 2>&1 | less
ls: 無(wú)法訪問(wèn)'/xxx': 沒(méi)有那個(gè)文件或目錄

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    555

    瀏覽量

    24639
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    669

    瀏覽量

    21956
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    361

    瀏覽量

    23234
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    384

    瀏覽量

    14793
  • Shell腳本
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    7955

原文標(biāo)題:shell腳本基礎(chǔ)(四)重定向和管道符

文章出處:【微信號(hào):FPGA學(xué)姐,微信公眾號(hào):FPGA學(xué)姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    shell腳本進(jìn)階】幾個(gè)常用的shell進(jìn)階腳本

    shell腳本進(jìn)階】幾個(gè)常用的shell進(jìn)階腳本
    的頭像 發(fā)表于 09-19 08:59 ?1797次閱讀
    【<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>進(jìn)階】幾個(gè)常用的<b class='flag-5'>shell</b>進(jìn)階<b class='flag-5'>腳本</b>

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之輸入輸出重定向

    shell輸出重定向通常是指將執(zhí)行命令的輸出信息從默認(rèn)的標(biāo)準(zhǔn)輸出(即當(dāng)前終端)重新定向到指定文件中。輸入重定向通常是指將命令所需的輸入數(shù)據(jù)的來(lái)源,從標(biāo)準(zhǔn)輸入(即當(dāng)前終端)更改為從指定文
    發(fā)表于 09-23 10:23

    嵌入式 學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之輸入輸出重定向

    shell腳本編寫之輸入輸出重定向shell輸出重定向通常是指將執(zhí)行命令的輸出信息從默認(rèn)的標(biāo)準(zhǔn)輸出(即當(dāng)前終端)重新
    發(fā)表于 09-24 10:06

    shell核心知識(shí)常見(jiàn)符號(hào)和流程控制:13.1 重定向 管道符

    Shell
    充八萬(wàn)
    發(fā)布于 :2023年07月12日 11:18:39

    Linux后臺(tái)程序重定向的問(wèn)題

    目前有一種方法是在程序后臺(tái)啟動(dòng)的時(shí)候,直接重定向到某個(gè)shell或telnet。方法如下:如tty命令查看目標(biāo)shell為 /dev/pts/0./yourapp & > /dev
    發(fā)表于 08-22 13:54

    linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析

    使用實(shí)例介紹這些默認(rèn)的輸出,輸入都是linux系統(tǒng)內(nèi)定的,我們?cè)谑褂眠^(guò)程中,有時(shí)候并不希望執(zhí)行結(jié)果輸出到屏幕。我想輸出到文件或其它設(shè)備。這個(gè)時(shí)候我們就需要進(jìn)行輸出重定向了。linux shell下常用
    發(fā)表于 03-02 13:59

    Linux Shell系列教程之(十六) Shell輸入輸出重定向

      一、Shell輸入輸出重定向概述  在了解重定向相關(guān)知識(shí)之前,我們先來(lái)看看Linux的文件描述符?! inux的文件描述符可以理解為linux跟蹤打開(kāi)文件,而分配的一個(gè)數(shù)字,這個(gè)數(shù)字有點(diǎn)類似c
    發(fā)表于 09-12 15:53

    shell腳本最簡(jiǎn)明的教程

    Shell腳本,就是利用Shell的命令解釋的功能,對(duì)一個(gè)純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說(shuō)Shell腳本就是一系列命令的集合
    的頭像 發(fā)表于 10-16 11:27 ?4695次閱讀
    <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>最簡(jiǎn)明的教程

    管道符、重定向與環(huán)境變量

    1.標(biāo)準(zhǔn)輸入重定向(STDIN,文件描述符為0):默認(rèn)從鍵盤輸入,也可從其他文件或命令中輸入。 3.錯(cuò)誤輸出重定向(STDERR,文件描述符為2):默認(rèn)輸出到屏幕。 表2 輸出重定向中用到的符號(hào)及其
    發(fā)表于 04-29 08:48 ?590次閱讀

    Keil下使用STlink重定向printf的配置

    Keil下使用STlink重定向printf的配置1. printf 重定向Keil默認(rèn)下使用Micro LIB庫(kù),該庫(kù)調(diào)用 fputs 實(shí)現(xiàn) printf,所以需要重新定義fputs函數(shù),以重定向
    發(fā)表于 12-27 18:43 ?18次下載
    Keil下使用STlink<b class='flag-5'>重定向</b>printf的配置

    109個(gè)實(shí)用shell腳本分享

    Shell腳本,就是利用Shell的命令解釋的功能,對(duì)一個(gè)純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說(shuō)Shell腳本就是一系列命令的集合
    的頭像 發(fā)表于 03-16 08:58 ?2545次閱讀

    shell腳本基礎(chǔ)知識(shí)

    shell腳本是一個(gè)文件,里面存放的是特定格式的指令,系統(tǒng)可以使用腳本解析器翻譯或解析指令并執(zhí)行(無(wú)需編譯),shell腳本的本質(zhì)是
    的頭像 發(fā)表于 04-17 15:00 ?1017次閱讀

    Linux I/O重定向詳解

    Linux I/O重定向可以定義為,更改從命令讀取輸入到命令發(fā)送輸出的方式。你可以重定向命令的輸入和輸出。對(duì)于重定向符號(hào),可以是 或者 | 。
    的頭像 發(fā)表于 05-04 14:34 ?779次閱讀

    Linux Shell腳本經(jīng)典案例分享

    ? 作為一名 Linux 運(yùn)維工程師,會(huì)寫好的腳本不僅能提高工作效率,還能有更多的時(shí)間做自己的事。最近在網(wǎng)上沖浪的時(shí)候,發(fā)現(xiàn)大家對(duì)Shell腳本都有“心結(jié)”,要么覺(jué)得自己寫出來(lái)不好看,要么根本無(wú)從下手。 下面分享249個(gè)真實(shí)
    發(fā)表于 06-16 14:03 ?610次閱讀
    Linux <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>經(jīng)典案例分享

    linux知識(shí)中常用到的管道符號(hào)有哪些

    作為一個(gè)高級(jí)linux運(yùn)維人員所要知道的,為什么要少用管道符?并不是說(shuō)方便就可以大量使用,我們需要考慮到其執(zhí)行的速度及效率,下面一起通過(guò)實(shí)例看看管道符要少用的原因!
    發(fā)表于 09-29 07:00 ?1955次閱讀