如何为Docker命令编写参数化Bash别名

时间:2015-07-09 10:40:37

标签: bash shell vim docker alias

我目前正面临一个问题。

我只是拉了一个Vim容器在CoreOs系统上使用它。 我尝试创建一个别名来启动Vim容器而不是已经存在的容器(主要是因为在这个上我可以安装不同的插件)

但目前它不起作用,我不知道为什么 容器在/home/dev

上具有卷装载

我的别名:

alias dockervim="docker run -ti --rm -v \"\$(pwd)\":/home/dev vimpadawan bash -c "vim \"\$1\"""

但是当我写dockervim file_name时,它会启动Vim但不启动文件。

有人有什么想法吗?

Docker版本

Client version: 1.6.2 
Client API version: 1.18 
Go version (client): go1.4.2 
Git commit (client): 7c8fca2-dirty 
OS/Arch (client): linux/amd64 Server version: 1.6.2 Server 
API version: 1.18 
Go version (server): go1.4.2 
Git commit (server): 7c8fca2-dirty 
OS/Arch (server): linux/amd64

谢谢!

编辑1:

使用此命令和start.sh脚本,我可以执行我想要的操作:

docker run --rm -ti -v $(pwd):/root/src -e FILENAME=Dockerfile vimpada

但是当我尝试创建它的别名时,它会显示以下错误:

  

exec:“Dockerfile”:$ PATH FATA中找不到可执行文件[0000]   来自守护程序的错误响应:无法启动容器   f579e5cd5bc61ee5da3b5cbeaf2a645c6183914739464cc4bf605202417467d9:
[8]   系统错误:exec:“Dockerfile”:$ PATH中找不到可执行文件

编辑2:

刚刚看到你的答案helmbert,但它实际上显示了与我的第一个函数相同的错误:

  

[8]系统错误:exec:“。bashrc”:在$ PATH中找不到可执行文件

你的第二个完美运作! 非常感谢:)

1 个答案:

答案 0 :(得分:3)

Bash aliases do not take arguments。但是你可以尝试声明一个bash函数:

function dockervim() {
    docker run -ti --rm -v "${PWD}":/home/dev vimpadawan vim "${1}"
}

然后只需拨打dockervim <filename>

请注意,此解决方案仅适用于当前工作目录中的文件。您应该能够使用以下功能使其防弹:

function dockervim() {
    filename=$(readlink -f $1)
    docker run -ti --rm -v "${filename}":/tmp/file-to-edit vimpadawan vim /tmp/file-to-edit
}