禁止警告“不安全的世界可写目录 /some/dir/”

时间:2021-01-11 23:33:02

标签: ruby

我已将当前目录添加到 $PATH (PATH="$PATH":.) 中,以便更轻松地在当前文件夹中运行 shell 脚本。

现在我经常在执行shell命令之前看到如下输出:

❯ cd Sites/project-a

❯ colorls

# /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin20/rbconfig.rb:229:
# warning: Insecure world writable dir /Users/philipp/Sites/project-a in PATH, mode 040777
#
# ... output of the colorls command ...

colorls 是我用来代替 ls 的 ruby​​ gem,但我也在许多脚本中使用其他 gem)

我知道其含义和背后的原因,但我不希望 ruby​​ 脚本指示我应该如何配置我的本地系统。

有没有办法在不改变目录权限的情况下抑制警告?

1 个答案:

答案 0 :(得分:0)

我找不到全局禁用“不安全的世界可写目录”警告的方法。

Another answer 建议用 shell 脚本替换 ruby​​ 可执行文件或使用不同的选项重新编译 ruby​​。在我看来,这两种选择都很困难,可能会导致其他意想不到的问题。

但是,我找到了一种方法来禁用单个脚本/宝石的警告:

就我而言,我使用 gem colorls 来生成更好的 ls 输出。到目前为止,这颗宝石是唯一一个频繁触发警告的宝石。我解决了这个问题,将以下别名添加到我的 .zshrc 文件(或 .bash_profile

解决方案 1

# Inside .zshrc

alias colorls='colorls --color=always 2>/dev/null'

重要的部分是错误重定向2>/dev/null

好:此别名允许我向命令添加自定义参数,例如 colorls --report

错误:此别名将掩盖命令产生的任何错误或警告。我想专门删除“不安全的世界可写目录”警告。

解决方案 2

# Inside .zshrc

alias colorls='colorls --color=always 2>&1 | grep "warning: Insecure world writable dir" -v'

好:我的第二次尝试没有将所有错误重定向到 /dev/null,而是将所有输出重定向到 grep,这会去除个别警告消息。

错误:该解决方案无法识别任何 colorls 参数;任何参数都将传递给 grep 而不是 colorls...

解决方案 3(最佳)

# Inside .zshrc

colorls() {
    /usr/bin/colorls --color=always $@ 2>&1 | grep "warning: Insecure world writable dir" -v
}

这是最好的解决方案:我们用 shell 函数替换 colorls 二进制文件。该 shell 函数调用二进制文件。 $@ 变量将所有参数传递给二进制文件,而 grep 从输出中删除特定警告。