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 1
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 脚本 执行的。。。因为我也记不住哪个项目对应哪个版本 |