bash/ksh脚本中的命令调用
假设我有一个内部包含以下内容的交互式脚本:bash/ksh脚本中的命令调用,bash,shell,unix,ksh,Bash,Shell,Unix,Ksh,假设我有一个内部包含以下内容的交互式脚本: #!/bin/bash ... ... while read -p "> " CMD do ... ... done ... ... 是否可以实施“命令调用”?我想按向上箭头键并运行以前输入的命令。可以在bash脚本中调用命令。下面是一个脚本hist.sh,该脚本在bash历史记录中以相对偏移量向后运行命令: #!/bin/bash HISTFILE=$(mktemp bhXXXXXX) set -o hist
#!/bin/bash
...
...
while read -p "> " CMD
do
...
...
done
...
...
是否可以实施“命令调用”?我想按向上箭头键并运行以前输入的命令。可以在
bash
脚本中调用命令。下面是一个脚本hist.sh
,该脚本在bash
历史记录中以相对偏移量向后运行命令:
#!/bin/bash
HISTFILE=$(mktemp bhXXXXXX)
set -o history
shopt -s expand_aliases
alias e=:
e one
e two
e three
e four
e five
e six
alias e=echo
EDITOR=: fc -n $((HISTCMD - (2+$1) )) 2> /dev/null | tr '[a-z]' '[A-Z]'
rm $HISTFILE
保存它,并通过输入1到6之间的数字进行测试:
hist.sh 5
hist.sh 1
输出:
TWO
SIX
注:
和e
的内容是修饰性的,它缩短了输出。例如,alias
第一次运行时,e six
将其解释为bash
,它什么也不做。第二次运行:six
时,e-six
将其解释为bash
echo-six
- 在脚本中,历史记录和别名默认不起作用,因此
和set
重新激活它们shopt
设置为临时文件,因此历史记录仅适用于此脚本$HISTFILE
可以运行历史记录中的任何命令,但需要输入一个绝对数,如345。但是当历史记录变满时,这些数字会向上滚动,因此一个命令后的345变为另一个命令后的344。当前命令号存储在fc
中,此处用于计算偏移量$HISTCMD
通常在运行命令之前将其发送到文本编辑器。将fc
设置为类似$EDITOR
的“不做任何事情”命令可防止出现这种情况:
用于将文本转换为大写,这有助于显示tr
实际工作fc
上也有人问过这个问题代码>将重复前面的命令,如果这是您的意思…嗯read-e
将为您提供行编辑功能,但向上/向下箭头使用您的命令历史记录,这在脚本中是不可用的。外观部分的有趣之处在于,alias
es可以用作的原始形式,而bash
函数本身无法做到这一点。