我已将当前目录添加到 $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 脚本指示我应该如何配置我的本地系统。
有没有办法在不改变目录权限的情况下抑制警告?
答案 0 :(得分:0)
我找不到全局禁用“不安全的世界可写目录”警告的方法。
Another answer 建议用 shell 脚本替换 ruby 可执行文件或使用不同的选项重新编译 ruby。在我看来,这两种选择都很困难,可能会导致其他意想不到的问题。
但是,我找到了一种方法来禁用单个脚本/宝石的警告:
就我而言,我使用 gem colorls
来生成更好的 ls
输出。到目前为止,这颗宝石是唯一一个频繁触发警告的宝石。我解决了这个问题,将以下别名添加到我的 .zshrc
文件(或 .bash_profile
)
# Inside .zshrc
alias colorls='colorls --color=always 2>/dev/null'
重要的部分是错误重定向2>/dev/null
。
好:此别名允许我向命令添加自定义参数,例如 colorls --report
错误:此别名将掩盖命令产生的任何错误或警告。我想专门删除“不安全的世界可写目录”警告。
# Inside .zshrc
alias colorls='colorls --color=always 2>&1 | grep "warning: Insecure world writable dir" -v'
好:我的第二次尝试没有将所有错误重定向到 /dev/null
,而是将所有输出重定向到 grep
,这会去除个别警告消息。
错误:该解决方案无法识别任何 colorls
参数;任何参数都将传递给 grep
而不是 colorls
...
# Inside .zshrc
colorls() {
/usr/bin/colorls --color=always $@ 2>&1 | grep "warning: Insecure world writable dir" -v
}
这是最好的解决方案:我们用 shell 函数替换 colorls
二进制文件。该 shell 函数调用二进制文件。 $@
变量将所有参数传递给二进制文件,而 grep
从输出中删除特定警告。