如何獲取shell命令輸出的錯誤資訊

時間 2021-08-30 09:49:12

1樓:

不太明白你表達的意思,是無法看到錯誤資訊還是想儲存錯誤資訊?

1、一般來講,shell命令都是有錯誤輸出的,它會列印在螢幕上,但實際上是標準錯誤輸出檔案,如果我不想輸出到螢幕,而是寫到檔案裡,我們可以用管道符'>'重定向標準錯誤輸出,比如:

我cat一個不存在的檔案,會有錯誤輸出,我可以把錯誤重定向到檔案裡

#cat /tmp/aa

cat: /tmp/aa: no such file or directory

#cat /tmp/aa 2>err.log

#cat err.log

cat: /tmp/aa: no such file or directory

2表示標準錯誤輸出。

另外,我甚至可以把錯誤輸出放到shell變數裡:

#aa=$(cat /tmp/aa 2>&1)

#echo $aa

cat: /tmp/aa: no such file or directory

2>&1表示,我把錯誤輸出重定向到標準螢幕輸出1上,在賦值給變數aa

2、關於如何除錯shell指令碼

很簡單#sh -vx ***x.sh

上述命令會列印shell指令碼的執行過程和結果,有助於排錯。當然,某些情況下,可能不會有輸出(如shell中有函式,可能就不會輸出函式裡的過程)。

2樓:go天馬行空

var=`ps -ef | grep oracle` 或者 var=$(ps -ef | grep oracle) 獲取系統中關於oracle的程序的資訊。

3樓:電腦老手

echo "errormsg" > &2; 標準錯誤

echo "infomsg" > &1; 標準輸出

如何在shell指令碼中,判斷一個基本命令執行是否成功

4樓:海天盛

1.連線到相應的linux主機,進入linux命令列狀態,等待shell命令的輸入。

2.在linux命令列下,輸入shell命令:telnet192.168.120.209。

3.最後,按下回車鍵執行shell指令,此時會看到telnet並沒有連線成功。

注意事項

附件:linux系統外殼原理

作為作業系統的外殼,linux系統的外殼為使用者提供了使用作業系統的介面。它是命令語言、命令直譯器和程式語言的統稱。

shell是使用者和linux核心之間的介面。如果您將linux核心看作是球體的中心,那麼shell就是核心周圍的外層。當從shell或其他程式中進行指示時

當linux傳遞一個命令時,核心會相應地做出響應。shell是一個命令語言直譯器,它有自己的一組內建的shell命令,可以被系統的其他部分使用

由程式呼叫。使用者在提示符處輸入的命令由shell解釋並傳遞給linux核心。

擴充套件資料:

變數傳遞執行結果

1.shell通常放在/bin或/user/bin目錄中。我們可以使用cat/etc/shell命令檢視當前linux系統上可用的shell。

2.使用echo$shell命令檢視當前系統的預設shell並輸出shell的環境變數。

3.shell中的echo命令用於輸出字串。我們將需要輸出的字串用雙引號括起來。

4.第一層的命令用ps1,第二層的命令用ps2, >是第二層的命令,如我們輸入的命令沒有結束的情況,顯示的是第二層的命令。

5.我們使用echo$ps1和echo$ps2來檢視提示符的當前格式,同樣我們也可以修改命令提示符。

6.已經建立了一個shell指令碼,使用vitest(自定義指令碼名)進入指令碼編輯頁面,test是指令碼的名稱,字尾是.sh。

5樓:乙飛桖

舉個例子,執行一條基本語句建立一個檔案

#!/bin/bash

touch test.txt

if [ $? -eq 0 ]

then

echo "執行成功"

else

echo "執行失敗"

fi$?可以判斷上一條命令是否成功,成功為0,不成功為非0

6樓:春羨利

true && echo success || echo fail

false && echo success || echo fail

7樓:匿名使用者

echo $?

一般返回0就是成功

c/c++如何在**中獲取shell命令的輸出

8樓:

在windows下面這個的確是需要用管道來實現的

#include

#include

bool excudecmd(char *szoutputbuf,char *szcmdline)

security_attributes sa;

handle hread,hwrite;

sa.nlength = sizeof(security_attributes);

sa.lpsecuritydescriptor = null;

sa.binherithandle = true; //輸出重定向

printf("建立匿名管道失敗");

return false;

startupinfo si;

process_information pi;

si.cb = sizeof(startupinfo);

si.hstdinput=hread;

si.hstderror = getstdhandle(std_error_handle);            //把建立程序的標準錯誤輸出重定向到管道輸入

si.hstdoutput = hwrite;           //把建立程序的標準輸出重定向到管道輸入

si.wshowwindow = sw_hide;

si.dwflags =startf_usestdhandles | startf_useshowwindow;

closehandle(hwrite);

closehandle(hread);

printf("建立子程序失敗");

return false;

else

closehandle(pi.hprocess);

closehandle(pi.hthread);

dword bytesread;

printf("讀資料失敗");

return false;

closehandle(hread);

return true;

int main()

char cmdline="cmd.exe /c echo 回顯的資訊",buf[1000];

zeromemory(buf,100);

excudecmd(buf,cmdline);

printf(buf);//buf就是你想要的東西

linux下面就不清楚了

9樓:匿名使用者

您可以試下類似的**,popen 函式在 vc6 中對應的應該是 _popen ,pclose 為 _pclose

#include

#include

void executecmd(const char *cmd, char *result)

;file *ptr;

strcpy(ps, cmd);

if((ptr=popen(ps, "r"))!=null)pclose(ptr);

ptr = null;

}else

}int main()

10樓:尋黑口罩女孩

popen,可以執行一個程序,其反回一個檔案指標,就可以讀取程序執行的結果!

#include

#include

#include

int main()

11樓:匿名使用者

示意流程如下:

return_code = system("shell command") ;

if (return_code == 1)do something ;

else if (return_code == 2)do something ;

else

do something ;

12樓:

windows環境可以用管道

如何在shell指令碼中執行cd命令

在工作中,網際網路公司,經常不是直接登入到服務上,而是通過跳板機進行中轉。這樣就會用到cd命令切換目錄。編輯shell檔案 vim switchdir.sh plain view plain copycd opt service mobile kafka 2.10 0.8.1 lizt bin so...

bash shell如何獲取到命令執行結果的值

將一條命令的執行結果取得命令執行結果的值有 1 使用反引號 數字鍵1左邊的鍵,tab鍵上面,英文方式輸入 如 a echo hello world 即將命令 echo hello world 的輸出賦給變數a 2 可以使用 如 a echo hello world 即將命令echo hello wo...

c語言怎麼編寫輸出數再換行輸出數字的命令

四舍 入 輸出6個數再換行即輸出時每行6個數,可以採用迴圈來實現該效果。int a 100 int i for i 0 i 100 i printf d,a i if i 6 5 printf n 因為i是從0開始計數,所以每次i 6為5時換行,實現每行6個效果。擴充套件資料 c語言的知識梳理總結 ...