问题是关闭反引号`
在命令中的位置:
export PATH=`echo ${PATH} | awk -v RS=: -v ORS=: '/SDE/ {next} {print}'` | sed 's/:*$//'
如果您使用推荐的$(...)
符号,您会看到这相当于:
export PATH=$(echo ${PATH} | awk -v RS=: -v ORS=: '/SDE/ {next} {print}') | sed 's/:*$//'
它将操作的输出通过管道export
传输到sed
,但是export
是静默的。
采用:
export PATH=$(echo ${PATH} | awk -v RS=: -v ORS=: '/SDE/ {next} {print}' | sed 's/:*$//')
我已经修复了逐字复制错误命令的答案。正如三人组在评论中指出的那样,我并不完全相信该awk
解决方案,但问题是“代码出了什么问题”,答案是“反引号的位置”。该awk
脚本确实处理删除 PATH 中任何位置的 PATH 元素;该sed
脚本只是确保没有尾随:
,因此不会在 PATH 末尾隐式使用当前目录。
另请参阅:我如何在 shell 脚本中操作 PATH 元素clnpath
以及如何防止在其中复制 PATH 变量中csh
的脚本——该脚本适用于像 Bourne、Korn、Bash shell 这样的 POSIX 式 shell,尽管有问题的主题。clnpath
和这里使用的符号之间的一个区别是clnpath
只删除完整的路径名;它不会尝试进行部分路径元素匹配:
export PATH=$(clnpath $PATH /opt/SDE/bin)
如果要删除的路径元素是/opt/SDE/bin
. 请注意,clnpath
可用于维护LD_LIBRARY_PATH
、CDPATH
和MANPATH
任何其他类似路径的变量;awk
当然,调用也可以。
我顺便注意到脚本中的/SDE/
模式将删除;正则表达式中的斜杠与路径名中的斜杠无关。awk
/opt/USDER/bin