Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Coreutils缺少OS X ACL实现的GNU ls_Macos_Bash_Homebrew_Ls_Gnu Coreutils - Fatal编程技术网

Macos Coreutils缺少OS X ACL实现的GNU ls

Macos Coreutils缺少OS X ACL实现的GNU ls,macos,bash,homebrew,ls,gnu-coreutils,Macos,Bash,Homebrew,Ls,Gnu Coreutils,我正在使用brew检索和安装通用GNU版本的终端命令和UTIL,并使用brew安装coreutils 然后在我的.bash_配置文件中,我包含了它们的路径 if [ -d $(brew --prefix coreutils)/libexec/gnubin ]; then PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH" fi 到目前为止还不错,我可以使用coreutils的GNU版本。 问题来自ls。未在GNUls上实现的

我正在使用
brew
检索和安装通用GNU版本的终端命令和UTIL,并使用
brew安装coreutils

然后在我的.bash_配置文件中,我包含了它们的路径

if [  -d $(brew --prefix coreutils)/libexec/gnubin  ]; then
    PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
fi
到目前为止还不错,我可以使用coreutils的GNU版本。
问题来自
ls
。未在GNU
ls
上实现的苹果工具。我发现这一点是因为我多次撞击头部,不明白为什么(例如)
ls-le@
会给我错误
ls:invalid选项--“e”

所以现在我明白了GNULS是个问题

问题
除了
ls
,我怎样才能找到所有coreutils的来源? 我想使用苹果版的
ls
,但继续使用其余的coreutils。通过修改我的
.bash\u配置文件
,如何实现这一点

编辑:

如果我创建一个标志以了解我当前是否在使用coretuils,因此我将创建一个别名:

ls_flag=false
if [[  $(brew) &&  -d  $(brew --prefix coreutils)/libexec/gnubin  ]]; then
    PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
    ls_flag=true
fi

export PATH

if [[ ls_flag -eq true ]]; then
   alias ls=/bin/ls
fi
alias ls=/bin/ls
如果我在这里停止我的
.bash\u配置文件
,这将起作用。但另一个问题来自以下条件。我使用它们来了解我使用的是GNU ls还是Apple ls,并选择了正确的选项来着色ls命令:

# Detect which `ls` flavour is in use
if ls --color > /dev/null 2>&1; then # GNU `ls`
    alias ls='ls --color=always'
    # load my color scheme (it only works with GNU ls)
    # dircolors only work with coreutils
    eval `dircolors  ~/.dotfiles/data/dircolors`
else # OS X `ls`
    alias ls='ls -G'
fi
因此,此时ls应为:
1) 别名ls=/bin/ls#来自第一个条件ls#u标志==true
2) 别名ls='ls-G'#来自第二个条件“if ls--color”(false)


但是如果我提示
ls-@
仍然会抛出一个错误,告诉我我仍在使用GNU ls…不知道为什么最后一个别名会覆盖以前的别名…

您可以创建一个别名:

ls_flag=false
if [[  $(brew) &&  -d  $(brew --prefix coreutils)/libexec/gnubin  ]]; then
    PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
    ls_flag=true
fi

export PATH

if [[ ls_flag -eq true ]]; then
   alias ls=/bin/ls
fi
alias ls=/bin/ls
这是错误的

if [[ ls_flag -eq true ]]; then
   alias ls=/bin/ls
fi
您缺少
$ls\u标志的
$
,并且
-eq
用于
[…]]

因为“true”和“false”是命令,所以您需要编写

if $ls_flag; then
   alias ls=/bin/ls
fi
或者,更简洁地说

$ls_flag && alias ls=/bin/ls

这行不通。首先是因为它应该是别名ls=/bin/ls
,但是如果我
我得到的是哪个ls
/usr/local/opt/coreutils/libexec/gnubin/ls,那么如果你键入
ls
会发生什么?使用
哪个
是无关紧要的。如果我键入
ls-@
我会得到一个错误,显示我仍在使用GNU ls。但是如果我在本地shell中使用别名,那么它就会工作。问题来自于在bash_概要文件中定义别名。除了ls命令外,是否有一种明确的方法来告诉导出路径?这是我唯一能想到的方法。好的,问题来自我对ls使用的其他别名,我将更新问题:为什么不删除(或重命名,或
chmod-x
)coreutils'
ls
?另一种可能性是链接您想要使用的coreutils命令(因此不是
ls
)在
/usr/local/bin
(或者在OSX上更合适的另一个目录)中,确保此目录出现在
/bin
路径变量中的
/PATH
之前。@gniourf\u gniourf我想使用coreutils中的所有命令(但不是ls),这就是
路径=“$(brew--前缀coreutils)/libexec/gnubin:$PATH“
可以。手动链接所有命令,但ls似乎不是一个好的解决方案。假设有100个命令,而不是删除我不需要的唯一一个。你建议链接我需要的99个。要做很多工作,那么我的其他建议如何?例如,从coreutils重命名/remove/
chmod-x
ls
?顺便说一句,链接除o之外的所有命令ne相当简单:将它们全部链接起来,然后删除你不想要的链接。你是对的,我的bash脚本知识令人尴尬