簡體   English   中英

執行時如何重定向已回顯的Shell命令

[英]How to redirect echoed shell commands as they sre executed

問題之后在Shell腳本中:在執行外殼命令時回顯外殼命令,我想知道如何將已執行/回顯的命令重定向到文件(或變量)?

在設置bash詳細模式set -v之后,我嘗試了通常的stdout重定向,例如ls $HOME > foo.txt ,但是僅ls的輸出被重定向了。

PS:我想要的是擁有一個函數(稱為“ save_succ_cmdline()”),可以將其放在(復雜的)命令行前面(例如, save_succ_cmdline grep -m1 "model name" /proc/cpuinfo | sed 's/.*://' | cut -d" " -f -3 ),這樣該函數將在成功時保存給定的命令行。

請注意,上面的grep -m1 "model name" ...示例僅是一個帶有特殊字符(|,',“)的命令行示例。我從這樣的函數” save_succ_cmdline()“中得到的期望是執行實際命令(在函數名稱之后, grep -m1 "model name"... ),並且該函數驗證退出代碼( [$? == 0] ),以確定是否可以保存命令行或如果實際命令成功執行,則函數(“ save_succ_cmdline”)可以保存命令行表達式(包括管道和其他所有內容)。

我的意願是使用bash -o verbose功能來擁有並(臨時)保存命令行。 但是我做不到。

提前致謝。

您的save_succ_cmdline函數將僅在命令行中看到grep -m1 "model name" /proc/cpuinfo部分,因為外殼程序將看到管道本身。

話雖這么說,如果您只想要grep部分,那么它將完成您想要的。

save_succ_cmdline() {
    "$@" && cmd="$@"
}

如果您需要整個管道,則需要將整個參數都引用到save_succ_cmdline並在"$@" (或類似名稱)上使用eval ,我不確定您是否可以將其用於任意引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM