gpt4 book ai didi

pythonbrew bashrc awk 行不再有效

转载 作者:行者123 更新时间:2023-11-28 22:50:20 25 4
gpt4 key购买 nike

我最近升级了我的 FreeBSD 盒子,现在 pythonbrew 似乎坏了。它从这一行的 .pythonbrew/etc/bashrc 文件中退出:

PATH_WITHOUT_PYTHONBREW=$(printf "$PATH" | awk -v RS=: -v ORS=: "/${PATH_ROOT//\//\/}/ {next} {print}" | sed -e 's#:$##')

给出错误:

awk: syntax error at source line 1
context is
>>> //home/myusername/. <<< pythonbrew/ {next} {print}
awk: bailing out at source line 1

那个 PATH_ROOT 变量是

/home/myusername/.pythonbrew

最佳答案

  1. 不要在 printf 格式化参数中放置变量,因为当变量包含 printf 格式化字符时,这会失败,例如'%'。因此,请使用 printf "%s""$PATH" 而不是 printf "$PATH"
  2. 使用双引号来分隔 awk 脚本从来都不是一个好主意,因为它在脚本的其余部分引入了双引号 hell 。所以使用 '/'"${PATH_ROOT//\//\/}"'/{...}' 而不是 "/${PATH_ROOT//\//\/}/{...}"
  3. 允许 shell 变量扩展来动态提供 awk 脚本的主体部分几乎不是一个好主意,因为它可能会引入奇怪的语法错误。所以使用 awk -v path_root="${PATH_ROOT//\//\/}"'$0 ~ path_root{...}' 而不是 '/'"${PATH_ROOT//\//\/}"'/{...}'
  4. 与其测试条件并使用 next,然后在条件不存在时使用打印,不如测试条件是否定的。
  5. 当将 2 个变量设置为相同的值(例如 RS 和 ORS)时,将它们一起设置而不是单独设置是最清楚的。

因此,总而言之,作为起点,您的脚本将是:

PATH_WITHOUT_PYTHONBREW=$(printf "%s" "$PATH" |
awk -v path_root="${PATH_ROOT//\//\/}" 'BEGIN{RS=ORS=":"} $0 !~ path_root' |
sed -e 's#:$##')

假设您的 PATH_ROOT 操作是有意义的。

它可以进一步改进,但这应该足以消除您的错误。

关于pythonbrew bashrc awk 行不再有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com