簡體   English   中英

如何在執行前編輯bash腳本的輸出?

[英]How do I edit the output of a bash script before executing it?

例如,看下面的bash代碼行

eval `echo "ls *.jpg"`

它列出了當前目錄中的所有jpg。 現在,我希望它只是將行打印到提示,以便可以在執行之前對其進行編輯。 (例如,像鍵盤輸入一樣)

我怎么做?


這個問題的原因來自一個更有用的別名:

alias ac="history 2 | sed -n '1 s/[ 0-9]*//p' >> ~/.commands; sort -fu ~/.commands > ~/.commandsTmp; mv ~/.commandsTmp ~/.commands"
alias sc='oldIFS=$IFS; IFS=$'\n'; text=(); while read line ; do text=( ${text[@]-} "${line}") ; done < ~/.commands; PS3="Choose command by number: " ; eval `select selection in ${text[@]}; do echo "$selection"; break; done`; IFS=$oldIFS'
alias rc='awk '"'"'{print NR,$0}'"'"' ~/.commands; read -p "Remove number: " number; sed "${number} d" ~/.commands > ~/.commandsTmp; mv ~/.commandsTmp ~/.commands'

ac添加或記住上一個鍵入的命令, sc顯示可用命令並執行它們, rc刪除或忘記命令。 (您需要先touch ~/.commands才能起作用)

如果我可以在執行前編輯sc的輸出,它將更加有用。

history -s whatever you want

將在您的bash歷史記錄中附加“任何內容”。 然后,如果您啟用了shopt histreedit,則簡單的向上箭頭鍵(或!!然后按回車鍵---我認為這是我正在考慮的選項,而不是100%確定),它將在命令行上為您提供“所需的一切” ,准備進行編輯。

關於您的別名的一些評論:

簡化報價:

alias rc='awk "{print NR,\$0}" ~/.commands ...'

不需要tail ,您可以sed調用組合在一起:

alias ac="history 2 | sed -n '1 s/[ 0-9]*//p'..."

簡化的eval ,不需要$IFS

alias sc='text=(); while read line ; do text+=("${line}") ; done < ~/.commands; PS3="Choose command by number: " ; select selection in "${text[@]}"; do eval "$selection"; break; done'

@OP,您確實應該將這些命令放入子例程中,並在想要使用它們時將其來源。 (摘自丹尼斯的答案)

rc(){
 awk "{print NR,\$0}" ~/.commands ...
}

ac(){
 history 2 | sed -n '1 s/[ 0-9]*//p'...
}

sc(){
 text=()
 while read line
 do 
     text+=("${line}") 
 done < ~/.commands
 PS3="Choose command by number: " 
 select selection in "${text[@]}" 
 do 
     eval "$selection"
     break
 done
}

然后將其另存為“ library.sh”或其他內容,以及何時要使用它

$ source /path/to/library.sh  

要么

$ . /path/to/library.sh  

也許您可以使用preexec.bash?

http://www.twistedmatrix.com/users/glyph/preexec.bash.txt

(在相關說明中,您也可以使用ctrl-xe編輯當前命令行!)

干杯,

塔沃德

暫無
暫無

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

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