我需要运行一个命令,然后再次运行相同的命令,仅更改一个字符串。
例如,我运行命令
$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query
现在,从那里开始,无需返回命令历史记录(通过向上箭头),我需要替换code1
为mycode
或其他字符串。
可以在 Bash 中完成吗?
答案1
我重命名了你的脚本,但这里有一个选项:
$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query
执行脚本后,使用:
$ ^code1^code2
...这导致:
./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code2 -t query
man bash
并搜索“事件指示符”:
^字符串1^字符串2^
快速替换。重复最后一个命令,将 string1 替换为 string2。相当于 !!:s/string1/string2/
编辑以添加全局替换,这是我刚刚从 @slm 的回答中了解到的https://unix.stackexchange.com/a/116626/117549:
$ !!:gs/string1/string2
其中说:
!! - recall the last command
g - perform the substitution over the whole line
s/string1/string2 - replace string1 with string2
答案2
bash 内置命令fc
可用于在历史记录中查找命令并可选择编辑/运行它。使用 bash 内置命令help fc
获取更多文档。
fc -s code1=code2
会查找上一条命令中所有出现的code1并将其更改为code2,然后执行新命令。
当需要更改多个特殊字符时,它会很有用。假设之前的命令是;
$ java a/b/c/d
# Then,
fc -s /=.
# will produce
$ java a.b.c.d