我有一个简单的 bash 脚本。我需要检查文件是否存在,然后执行一些与检查结果相关的操作。脚本如下所示:
#!/bin/bash
productionPackageJsonPath=/var/www/portaldev/current/package.jsonxxx
productionNodeModulesPath=/var/www/portaldev/current/node_modules
hasPackageJsonFile=$(test -f productionPackageJsonPath)
hasDiff=""
if [ "$hasPackageJsonFile" == "true" ]
then
echo "aaaaaaaaaaaaaaaaaaaa"
hasDiff=$(diff ${productionPackageJsonPath} package.json)
else
echo "bbbbbbbbbbbbbbbbbbb"
fi
这应该返回 false,因为 package.jsonxxx 不存在。但我总是得到 true 或者我不知道是什么。但控制台总是显示 echo "aaaaaaaaaaaaaaaaaaaa"
有人能告诉我我做错了什么吗?谢谢。
答案1
所以我的解决方案是:
productionPackageJsonPath=/var/www/portaldev/current/package.json
if [ -f $productionPackageJsonPath ]
then
echo "aaaaaaaaaaaaaaaaaaaa"
hasDiff=$(diff ${productionPackageJsonPath} package.json)
else
echo "bbbbbbbbbbbbbbbbbbb"
hasDiff=""
fi
答案2
hasPackageJsonFile=$(test -f productionPackageJsonPath)
现在命令的输出test -f productionPackageJsonPath
被赋值给hasPackageJsonFile
。这个变量将始终为空,因为 $(...) 捕获的是程序的输出,而不是结果。