我已经将当前目录添加到我的$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,但我也在许多脚本中使用其他宝石)
我知道它的意义和原因,但我不想要一个红宝石脚本来决定我应该如何配置我的本地系统。
是否有一种方法可以在不更改目录权限的情况下抑制警告?
发布于 2021-01-12 12:25:42
我无法找到一种全局禁用“不安全的世界可写dir”警告的方法。
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
Bad:这个别名将掩盖命令产生的任何错误或警告。我想特别删除“不安全的世界可写的dir”警告。
解决方案2
# Inside .zshrc
alias colorls='colorls --color=always 2>&1 | grep "warning: Insecure world writable dir" -v'Good:没有将所有错误重定向到/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则从输出中删除特定的警告。
https://stackoverflow.com/questions/65676001
复制相似问题