我已经将当前目录添加到$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
从输出中删除特定警告。