禁止显示警告"Insecure world writable dir /some/dir/"



我已经将当前目录添加到$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是一个ruby gem,我使用它来代替ls,但我在许多脚本中也使用其他gem(

我知道它的含义和背后的原因,但我不想让ruby脚本来决定我应该如何配置本地系统。

是否有一种方法可以在不更改目录权限的情况下抑制警告

我找不到全局禁用";不安全的世界可写目录";警告

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

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

在我的例子中,我使用gemcolorls来生成更好的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从输出中删除特定警告。

最新更新