2017-06-14 49 views
1

我正在学习docker,并且我正在尝试执行shell测试以查看是否已加载关键工具。我正在做一些关于将docker部署到不同风格的服务器上的测试。这里是脚本,保存为dockerScript.sh脚本测试以查看工具是否已经加载?

#!/bin/bash 
## run "$ chmod +x dockerScript.sh" to make the script executable. 
## then run "./dockerScript.sh" to activate the script 
touch docker-compose.yml 
cat > docker-compose.yml <<EOL 
version: "2" 
services: 
    (etc...) 
EOL 
if[docker-compose is not already loaded] <--- what goes here? 
then 
    curl -L https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 
    chmod +x /usr/local/bin/docker-compose 
fi 

docker-compose up -d 

在这种情况下,我想验证docker-compose被加载。我不太确定如何做到这一点。

我看到,如果我$ docker-compose -v我得到这样

docker-compose version 1.14.0-rc2, build 24dae73成功的响应

,要么

-bash: docker-compose: command not found

bash: docker-compose: command not found

作为响应,如果该工具是没有加载,具体取决于我将使用哪种linux的风格G。

有没有办法测试操作系统的存在/安装docker-compose工具并完成我的shell脚本?

+0

是否'如果搬运工-构成-v>的/ dev/null的; then'不工作? – 123

+0

没有。这是对其他人建议使用'which'测试的回复。 – zipzit

+0

'pgrep docker-compose'? (我理解'加载'的权利吗?) – hidefromkgb

回答

1

可以使用hash命令

hash docker-compose 2>/dev/null || { echo >&2 "I require docker-compose but it's not installed."; } 

hash是一个bash内置命令。哈希表是bash的一项功能,它可以防止每次键入命令时通过在内存中缓存结果来搜索$PATH

您可以使用hash命令,不用担心已经在您的系统上安装了hash utillity或没有。如果你有bash那么你有hash

hash some_cmd 2>/dev/null装置重定向错误输出从stderr的到/ dev/null的

+0

我迷路了。你能解释一下这里究竟发生了什么吗?哈希似乎是一个'记住'以前的shell命令的工具。我正在尝试一大堆预先封装的操作系统。如果工具被安装在处女OS版本中,那么'hash'会记录那个?还是哈希只记得我输入的东西?什么是'2>'符号?等等......这可能是正确的答案,但是没有解释,它在未来对其他人的持久力和价值几乎没有。 – zipzit

+0

对不起,我会尽力解释我的答案 –

+0

非常感谢......这似乎是为我工作。是的,我仍然在学习shell脚本的来龙去脉。 – zipzit

相关问题