
CentOS7
如:
testsh:sh 内容 sed -i '$a\export PATH="$PATH:/usr/local/mysql/bin:/root"' /etc/profile export PATH="$PATH:/usr/local/mysql/bin:/root" # 上面是添加了新环境变量 # 以下此命令,需要具有环境变量 /usr/local/mysql/bin 在 PATH 里 # 但是在 shell 里,似乎上面的 export PATH 是没有应用上的, # 请问应该如何马上起效呢? /usr/local/mysql/bin/mysql_secure_installation 1 duke807 2022-03-31 10:34:17 +08:00 via Android 你的似乎不 本就是立即生效 |
2 uti6770werty OP @duke807 在两个步骤之间,我增加过一个 export 输出当前环境变量打印出来, export PATH="$PATH:/usr/local/mysql/bin:/root" 这条在 shell 的运行过程中,确实没有应用上。。。 |
3 stephenyin 2022-03-31 10:37:54 +08:00 export PATH="/usr/local/mysql/bin:/root:$PATH" |
4 uti6770werty OP @stephenyin 成功了,搞不懂为啥把变量放后面就可以。。。 |
5 stephenyin 2022-03-31 11:08:57 +08:00 @uti6770werty #4 影响查找依赖的顺序,你原来的 $PATH 里应该有一个同名依赖文件。 |
6 libook 2022-03-31 11:38:14 +08:00 export 指令会在当前 Shell 会话中立即生效。 Shell 会使用 PATH 环境变量的值从左到右每个目录查找是否有相应的指令文件存在,你原$PATH 拼在左边就会被先搜索,拼在右边就会被后搜索,搜索到第一个匹配的项就停止搜索。 你可以做个试验: cd /tmp mkdir a mkdir b echo "echo a">a/e echo "echo b">b/e chmod +x a/e chmod +x b/e export PATH=/tmp/a:$PATH:/tmp/b 然后你执行 e ,看输出的是 a 还是 b 。 你拼左侧不起作用可能是左侧的目录中已经存在 mysql_secure_installation 这个名称的文件了。 想要检查某个指令当前在 PATH 环境变量中的位置,可以用 which 指令,如`which mysql_secure_installation`。 |
7 diggzhang 2022-03-31 11:44:32 +08:00 试试这个办法,在脚本正式逻辑执行前将环境变量文件重新 export: ```shell #argumaents 1=abs_file_path function export_from_file() { while read LINE; do export "$LINE"; done < $1 } export_from_file /path/to/envfile ``` |
8 MiketsuSmasher 2022-03-31 12:59:12 +08:00 小常识:export PATH 的时候应该把自定义路径放在原有 PATH 的前面 `export PATH=<custom path>:$PATH` |
9 veightz 2022-03-31 13:04:32 +08:00 可以贴一下具体的报错, 如果是命令找不到的话, 也可以 which 一下看一下 |
10 tedding 2022-03-31 19:20:32 +08:00 ProjectPath=$HOME/Documents/Workspace/Path/To/Project NODE=$HOME/.nvm/versions/node/v16.14.2 export PATH=$NODE/bin:$PATH cd $ProjectPath npm run start:prep 不同项目的 node 版本不同 我是用 shell 脚本 执行的。。。因为我也记不住哪个项目对应哪个版本 |