我正在使用命令行按照相同的模式手动执行相同的命令多次。现在我正在寻找一种简化它的方法,只需输入一次命令即可。
让我们看一个普通的docker示例:
docker ps
docker ps -a
docker ps -l
docker stop x
docker start x
docker start y
docker logs y
docker logs -f z
此示例也适用于更多命令,例如 git、brew、gulp、gcloud。
现在我正在寻找某种命令包装器 shell,它允许我编写with docker
将任何命令包装在嵌套/子 shell 中的命令。
然后我就不需要在docker
命令前面添加任何内容,只需调用:
>ps
# does docker ps and displays result
>stop x
# prepends docker so docker stop x is actually executed
CTRL+C # to exit the command wrapper
类似的东西已经存在了吗?我在谷歌上搜索过,但无法正确描述,因此没有找到任何东西。
答案1
您也可以自己定义一个函数,并将其包含在您的.bash_profile
或类似的函数中:
function with {
echo -n "$1> "
while read input
do
if [[ $input == "exit" ]]
then
break
fi
eval "$1 $input"
echo -n "$1> "
done
echo
}
使用示例:
user@host $ with git
git> status
# On branch master
nothing to commit (working directory clean)
git> exit
user@host $
编辑:此功能不执行输入清理或任何操作,因此使用时请自行承担风险等...
答案2
您可以编写 bash 或其他 shell 脚本来执行此操作。一种几乎同样好的简单替代方法是定义简短的别名并将其添加到前面,例如
alias d=docker
alias g=gcloud
等等。然后运行
d ps
d ps -a
等等,这几乎不比仅仅输入命令多做多少工作。