[英]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.