找不到Bash脚本El Capitan


1

我创建了一个简单的Bash脚本 ls -l

在Mavericks和旧版本的OSX中,我只是为脚本创建了一个符号链接并将其放入 /usr/bin 文件夹( ln -s ll.sh /usr/bin/ll 然后我可以使用执行脚本 ll 从任何文件夹。

自升级到El Capitan后,我无法加载此脚本。我已禁用SIP,以便我能够创建符号链接,并且脚本绝对可执行。那个地点 ( /usr/bin )肯定在$ PATH中,我甚至尝试在$ PATH中添加脚本路径。

似乎没有什么工作,我得到的只是 -bash: ll: command not found

每次更新$ PATH后我都重新启动了终端,我试过了 source ~/.bash_profile 但两者都没有任何区别。

编辑: 我还尝试将脚本的当前目录添加到$ PATH,这也是同样的错误。最后,我将所有脚本别名化,以便它们运行。


当你运行你的ll.sh它有效吗?
enzo

2
如果全部了 ll.sh -script_正在做的是 ls -l 那你应该用一个 别号 代替。组 alias ll='ls -l' 在里面 ~/.profile 要么 ~/.bash_profile,无论你使用哪个。看到 6.6别名 在里面 BASH参考手册
user3439894

我用了 ls -l 例如,我有很多脚本可以做不同的事情。我可以为他们创建一个别名,但我想知道以前的实现是否仍然可行。如果我运行.sh脚本它运行正常。
Interbred Monkey

1
有几件事......真的没有必要使用扩展 shell脚本 ,例如 ll.sh 只需要 ll。我有一个单独的目录,我将所有脚本放入并将该目录路径名添加到 $PATH。我在该目录中编写了150个脚本,但没有一个具有扩展名,但它们都是可执行文件。有些甚至有 符号链接 (不是Finder Alaises,不要混淆 bash别名 )为方便起见,在终端输入较短的名称。这样,我的所有脚本都位于更集中的位置,不会混入系统可执行文件。
user3439894

请问请在问题中添加完整的脚本?和输出 ls -l /usr/bin/ll
nohillside

Answers:


1

我不确定你的设置有什么问题,但是做同样事情的另一种(也许是更好的)方法是通过Bash的 alias 命令。在命令提示符下,键入:

alias ll="ls -l"

然后你可以输入 ll 并获得完整的列表。如果你想把这个永久化,你可以把它放在 .bashrc 您的主目录中的文件,如果该文件尚不存在,您可以创建该文件。


还值得注意的是,您可以将命令别名到文件位置 ll=~/scripts/ll.sh这就是我最终做的事情。谢谢您的帮助!
Interbred Monkey

4

只需阅读评论,看看您正在寻找一般解决方案,而不是那个具体的例子。我会留下我之前的答案以防万一,但这是一个更通用的解决方案。

我的第一条建议是:离开 /usr/bin 单独。没有理由搞乱它,原因很多 惹它。相反,在其他地方添加一个目录,将脚本放在那里,然后将其添加到您的手中 $PATH 变量。如果您只想为您的用户提供此功能,则可以创建一个 scripts 要么 bin 您的主目录中的目录,或者如果您希望它全局可用,您可以将其放在 /usr/local,例如 /usr/local/scripts 要么 /usr/local/bin。然后,在 .bashrc 在您的主目录中的文件,添加以下内容:

export PATH=$PATH:~/scripts:/usr/local/scripts

如果您希望让命令覆盖系统命令(如果它们具有相同的名称),那么您可以执行以下操作:

export PATH=~/scripts:/usr/local/scripts:$PATH

如果你想为所有用户设置这个集合,那么就有一个全局用户 /etc/bashrc 您可以将以上内容添加到的文件。

为了编辑全局 bashrc 或修改 /usr/local 你需要root / admin权限。


3
请注意/ usr / local / bin已经在默认的PATH中,所以如果你把它放在那里,你不必担心自定义PATH。
Gordon Davisson

你不需要围绕PATH绝对路径的引号吗?
IgorGanapolsky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.