如何在执行之前编辑bash脚本的输出?

时间:2010-02-17 12:10:06

标签: bash

例如,请查看以下bash-code行

eval `echo "ls *.jpg"`

它列出了当前目录中的所有jpgs。现在我希望它只是将行打印到提示符,以便我可以在执行之前编辑它。 (比如键盘确实)

我该怎么做?


这个问题的原因来自一个更有用的别名:

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的输出,那将会更有用。

4 个答案:

答案 0 :(得分:0)

history -s whatever you want

会在您的bash历史记录中添加“您想要的任何内容”。然后一个简单的向上箭头(或!!然后输入如果你启用了shopt histreedit ---我认为这是我正在考虑的选项,而不是100%肯定),会给你“你想要的任何东西”命令行,准备编辑。

答案 1 :(得分:0)

对别名的一些评论:

简化引用:

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'

答案 2 :(得分:0)

@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  

答案 3 :(得分:0)

也许你可以使用preexec.bash?

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

(在相关说明中,您也可以使用ctrl-x-e编辑当前命令行!)

欢呼声,

tavod

相关问题