2011-06-09 66 views
1

有沒有更好的方式來保存命令行執行之前?如何保存你即將在bash中執行的命令?

許多my/bin/bash腳本構造了一個很長的命令行。我通常將命令行保存到文本文件中以便於調試和(有時)執行。

我的代碼充斥着這個成語:

echo >saved.txt cd $NEW_PLACE '&&' command.py --flag $FOO $LOTS $OF $OTHER $VARIABLES 
       cd $NEW_PLACE && command.py --flag $FOO $LOTS $OF $OTHER $VARIABLES 

在兩個地方顯然更新代碼很容易出錯。不太明顯的是,某些部分需要在第一行中引用,而不是下一部分引用。因此,我無法通過簡單的複製和粘貼來進行更新。如果該命令包含引號,則會變得更加複雜。

必須有更好的方法!建議?

回答

4

有關創建它記錄一個輔助函數如何這個問題,然後執行命令? "[email protected]"將擴大到在傳遞任何命令。

log() { 
    echo "[email protected]" >> /tmp/cmd.log 
    "[email protected]" 
} 

通過簡單地在前面加上log到任何現有的命令中使用它。但它不會處理&&||,因此您必須分別記錄這些命令。

log cd $NEW_PLACE && log command.py --flag $FOO $LOTS $OF $OTHER $VARIABLES 
1

您是否在尋找-x(或bash -x)?這將執行後將每個命令寫入標準輸出。

-1

我建議你看看xargs命令。它是爲了解決程式設計建立參數列表和傳遞了他們對可執行文件進行批處理

http://en.wikipedia.org/wiki/Xargs

+0

我熟悉xargs的,但是我正在尋找一種方式來捕捉命令沒有建立長期的命令線。 – TomOnTime 2011-06-11 12:07:20

0

如果你只是在創建後立即執行該命令文件,你只需要構建命令一次,越獄的一個水平。

如果這會創建太多離散的小命令文件,您可以創建shell過程,然後運行一個單獨的命令文件。

(echo fun123 '()' { 
echo echo something important 
echo } 
) > saved.txt 
. saved.txt 
fun123 
1
  1. 使用script,您將得到歸檔一切。
  2. 使用-x來追蹤您的腳本,例如在當前的bash運行它們爲bash -x script_name args....
  3. 使用set -x(你會得到與取代的水珠和變量呼應你的命令
  4. 結合2,3與1
+0

關注他的倒票評論他的倒票?怎麼了? – jm666 2011-06-11 12:56:54

0

這聽起來像你的目標是保持。良好的日誌的腳本做了什麼,讓你可以調試它,當事情變壞我會建議使用-x參數在你的家當像這樣:

#!/bin/sh -x 
# the -x above makes bash print out every command before it is executed. 
# you can also use the -e option to make bash exit immediately if any command 
# returns a non-zero return code. 

此外,請參閱my answer關於redirecti前一個問題將--log傳遞到您的shell腳本中時,將所有此調試輸出都記錄到日誌中。這將重定向所有stdoutstderr。有時候,你仍然想寫信給終端來給用戶反饋。您可以通過保存stdout到一個新的文件描述符,並使用與echo(或其他程序)做到這一點:

exec 3>&1 # save stdout to fd 3 

# perform log redirection as per above linked answer 

# now all stdout and stderr will be redirected to the file and console. 
# remove the `tee` command if you want it to go just to the file. 

# now if you want to write to the original stdout (i.e. terminal) 
echo "Hello World" >&3 

# "Hello World" will be written to the terminal and not the logs. 
相關問題