You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中进入指定目录并执行目标文件(解决Redis-cli命令未找到异常)

解决Shell脚本中redis-cli命令找不到的问题

嘿,这个问题我太熟了!脚本里找不到redis-cli本质是环境变量PATH的问题——你手动在终端cd到Redis的src目录后,交互式shell的PATH可能包含当前目录(./),但脚本执行时的子shell环境不一定有这个配置,所以直接敲redis-cli会找不到命令。下面给你几个靠谱的解决办法,直接适配你的脚本:

方案1:用绝对路径调用redis-cli(最稳妥)

直接用redis-cli的完整绝对路径,不管脚本当前在哪个目录都能找到。修改你的脚本里的调用部分:

#!/bin/bash
REDIS_SRC_DIR=/Users/huangkunlun/Work/soft/redis/redis-6.0.10/src
HOST_TEST=redis-test-in.shantaijk.cn
HOST_DEV=r-uf61x52g8b0cketmk7.redis.rds.aliyuncs.com
env=$1
echo "environment is ${env}"
cd ${REDIS_SRC_DIR}
echo "cd redis directory $(pwd)"
if [[ ${env} == "test" ]]; then
    # 用绝对路径调用
    ${REDIS_SRC_DIR}/redis-cli -h ${HOST_TEST} -p 6379 -a Cloudhis1234
elif [[ ${env} == "dev" ]]; then
    # 同样用绝对路径
    ${REDIS_SRC_DIR}/redis-cli -h ${HOST_DEV} -p 6379 -a Cloudhis1234
else
    echo "no env args is specified, exit..."
fi

这里直接用你定义的REDIS_SRC_DIR变量拼接路径,既清晰又方便后续修改路径。

方案2:cd后用相对路径调用(简洁)

既然已经cd到了Redis的src目录,直接用./redis-cli指定当前目录下的可执行文件,这样shell就会优先在当前目录查找:

#!/bin/bash
REDIS_SRC_DIR=/Users/huangkunlun/Work/soft/redis/redis-6.0.10/src
HOST_TEST=redis-test-in.shantaijk.cn
HOST_DEV=r-uf61x52g8b0cketmk7.redis.rds.aliyuncs.com
env=$1
echo "environment is ${env}"
cd ${REDIS_SRC_DIR}
echo "cd redis directory $(pwd)"
if [[ ${env} == "test" ]]; then
    ./redis-cli -h ${HOST_TEST} -p 6379 -a Cloudhis1234
elif [[ ${env} == "dev" ]]; then
    ./redis-cli -h ${HOST_DEV} -p 6379 -a Cloudhis1234
else
    echo "no env args is specified, exit..."
fi

方案3:把Redis的src目录加入脚本的PATH(适合多次调用)

如果你的脚本里需要多次调用redis相关命令,可以先把src目录加入PATH,之后直接敲命令就行:

#!/bin/bash
REDIS_SRC_DIR=/Users/huangkunlun/Work/soft/redis/redis-6.0.10/src
# 把Redis的src目录加入PATH
export PATH="${REDIS_SRC_DIR}:${PATH}"
HOST_TEST=redis-test-in.shantaijk.cn
HOST_DEV=r-uf61x52g8b0cketmk7.redis.rds.aliyuncs.com
env=$1
echo "environment is ${env}"
echo "current PATH: ${PATH}"
if [[ ${env} == "test" ]]; then
    redis-cli -h ${HOST_TEST} -p 6379 -a Cloudhis1234
elif [[ ${env} == "dev" ]]; then
    redis-cli -h ${HOST_DEV} -p 6379 -a Cloudhis1234
else
    echo "no env args is specified, exit..."
fi

这个方案的好处是后续调用redis-cli、redis-server等命令都不用写路径,很方便。

另外提醒一句:脚本里用-a参数明文传密码不太安全,建议改成通过环境变量或者交互式输入,不过这是题外话啦~

内容的提问来源于stack exchange,提问作者MVP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:04:09