我在将我在 Makefile 中修改的 PATH 导出到当前终端时遇到了一些麻烦。我正在尝试添加到 PATH,即 Makefile 目录所在的 bin 文件夹。
这是 makefile 的相关片段:
PATH := $(shell pwd)/bin:$(PATH)
install:
mkdir -p ./bin
export PATH
echo $(PATH)
Run Code Online (Sandbox Code Playgroud)
echo 打印正确,但如果我在终端中重做 echo,PATH 保持不变。
在我当前的 zsh 行为中,在键入“sudo”后点击 Tab 只会添加一个空格。
$ sudo ...
Run Code Online (Sandbox Code Playgroud)
我真正想要的是当我点击选项卡时,选项卡完全扩展到它即将执行的二进制文件的路径,让我看到将运行的内容:
$ /usr/bin/sudo ...
Run Code Online (Sandbox Code Playgroud)
目的是防止我的机器上的本地用户被黑客入侵,一个条目添加到我的$PATH变量中,并且“sudo”运行恶意程序,这将很容易升级到 root。
我想知道 Ubuntu 本身是否提供了一种系统范围的方式来查找当前文件,JAVA_HOME或者是否有合适的地方设置JAVA_HOME.
Mac OS X 在这方面做得很好,因为/usr/libexec/java_home命令返回当前的JAVA_HOME. 但是对于 Ubuntu,我找到的材料总是告诉我将$JAVA_PATH指向设置为静态路径,该路径存储在~/.bash_profile.
但是,我认为这种方法有几个缺点:
update-alternatives,我必须$JAVA_HOME在.bash_profile. 额外的工作很烦人。$JAVA_HOME必需的程序,根本不知道.bash_profile。我必须$JAVA_HOME在他们的启动脚本中进行设置,因此一种标准且简单的获取方式$JAVA_HOME对我来说似乎很重要。好吧,欢迎任何建议。谢谢。
我有需要使用的 Java 工具。这些工具位于一个装满 jar 文件的文件夹中。出于显而易见的原因,我想将此文件夹添加到我的路径中,但是在我编辑 .bash_profile 以将新文件夹包含在 $PATH 变量中并获取它之后,它不起作用。我也试过注销,然后重新登录,这也不起作用。我只是不断收到错误消息“无法访问 jarfile .jar”
至少让我对桌面 Linux 感到困惑的一件事是,几乎所有东西都在我的 PATH 中。我的意思是所有桌面应用程序,包括 gnome-character-map 和 glchess 之类的东西。这些没有命令行界面可言,所以我想不出我会定期从终端启动这些的情况 - 在这种不太可能的情况下,我无法想象需要输入完整的内容会带来不便路径。它看起来很杂乱,但也许有一个很好的理由。
那么,为什么会发生这种情况呢?对性能或可维护性有什么显着影响吗?
我在使用我们的新贵脚本时遇到了一些问题,该脚本更改了用户并启动了一些 ruby 守护进程。
在过去,我只会bash -c "do the business" -l someuser确保使用该-l标志来模拟登录。
到目前为止,这一直很有效,我们的 ruby 进程一直在抛出以下错误:require: no such file to load -- rubygems (LoadError)经过一些调查,我发现此错误仅在我以 root 用户身份运行脚本时发生,即(当我sudo su或由 upstart 运行时)。
我认为这是一个 PATH 问题,因为当我首先手动设置路径时,它可以解决问题。
有没有办法改变用户并加载整个环境?
我也试过su user -c和sudo。
为了更容易测试,我正在“root”(sudo su)并运行which bundle(捆绑是一个红宝石)。
这是我得到的:
sudo -i -u webuser which bundle # => 没有输出su -l webuser -c which bundle # => 没有输出sudo su - webuser -c which bundle …是否有一种“简单”的方法可以运行“ls -la”样式的命令来列出当前 PATH 中的所有文件/可执行二进制文件?
(我打算将输出通过管道传输到 grep,以查找前缀未知但基本上已知“名称”的命令,即 bash 中的自动完成/制表符基本上无用的情况。所以某种“反向自动-完整的功能"...)
我正在制作一些我想轻松安装的二进制文件、脚本等(使用我自己的 rpm)。因为我希望每个人都可以访问它们,所以我的直觉是将它们放在 /usr/bin 中;
然而; 我的可执行文件现在消失在所有其他文件的池中;我怎样才能以一种简单的方式找回我放在那里的所有可执行文件。我在想:
什么是“最好的,最符合 linux 的方式”来做到这一点?
编辑:我们在公司对此进行了讨论,并提出了这个次优选项:将二进制文件放在 /usr/bin/company 中,并使用来自 /usr/bin 的符号链接。我对这个解决方案并不感到兴奋(讨论正在进行中)
我在 OSX 上的 iterm2 中使用 zsh 5.0.8 版本。
我启动计算机并向printenv我显示$PATH变量:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
Run Code Online (Sandbox Code Playgroud)
根据我的理解,zsh 将按顺序获取以下文件:
/etc/zshenv
~/.zshenv
/etc/zshrc
~/.zshrc
Run Code Online (Sandbox Code Playgroud)
我查了一下,我没有前 3 个文件,我.zshrc的基本上是空的,与 $PATH 变量无关。
那么$PATH变量集在哪里???
我已经PATH=foo设置了/etc/profile
根据/etc/password该root和myaccount用户都/bin/bash作为登录shell。
当我以 身份登录时myaccount,PATH已从 正确设置/etc/profile。如果 I 那么sudo su,PATH不包括在/etc/profile.
如果我sudo su -改为,则/etc/profile来源。我知道无论如何这样做是一种很好的做法,但我不明白为什么有必要使用/etc/profile.
为什么sudo suclobber PATH,无视/etc/profile以及如何使它不?