在我的 Fedora VM 上,使用我的用户帐户运行时/usr/local/bin,我的路径中有:
[justin@justin-fedora12 ~]$ env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
Run Code Online (Sandbox Code Playgroud)
同样在运行时su:
[justin@justin-fedora12 ~]$ su -
Password:
[root@justin-fedora12 justin]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
Run Code Online (Sandbox Code Playgroud)
但是,运行 via 时sudo,此目录不在路径中:
[root@justin-fedora12 justin]# exit
[justin@justin-fedora12 ~]$ sudo bash
[root@justin-fedora12 ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
为什么运行 via 时路径会不同sudo?
我正在尝试使用 MingW 编译 wxWidgets,并且我的路径中有 cygwin,这似乎有冲突。所以我想/d/Programme/cygwin/bin从 PATH 变量中删除,我想知道是否有一些优雅的方法来做到这一点。
天真的方法是将其回显到文件中,手动删除它并获取它,但我敢打赌有更好的方法。
看起来在将目录添加到 $PATH 时,它的子目录不会递归添加。那我可以这样做吗?或者是否有不支持的原因?
是否有一个单行程序会在 Bash 中列出 $PATH 中的所有可执行文件?
我有一个 bash 脚本文件,它放在添加到 $PATH 的某个目录下,以便我可以从任何目录调用脚本。
在与脚本相同的目录下还有另一个文本文件。我想知道如何引用脚本中的文本文件?
例如,如果脚本只是输出文本文件的内容,cat textfile则不起作用,因为从不同目录调用脚本时,找不到文本文件。
Cron 不使用其 crontab 所在用户的路径,而是拥有自己的路径。可以通过PATH=/foo/bar在 crontab 的开头添加来轻松更改,经典的解决方法是始终使用 cron 运行的命令的绝对路径,但是 cron 的默认 PATH 在哪里定义的?
我在我的 Arch 系统(cronie 1.5.1-1)上创建了一个包含以下内容的 crontab,并在 Ubuntu 16.04.3 LTS 机器上进行了测试,结果相同:
$ crontab -l
* * * * * echo "$PATH" > /home/terdon/fff
Run Code Online (Sandbox Code Playgroud)
打印出来的:
$ cat fff
/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)
但为什么?默认的系统范围路径设置在 中/etc/profile,但包括其他目录:
$ grep PATH= /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin"
Run Code Online (Sandbox Code Playgroud)
/etc/environmentor 中没有其他相关内容,/etc/profile.d我认为其他文件可能会被 cron 读取:
$ grep PATH= /etc/profile.d/* /etc/environment
/etc/profile.d/jre.sh:export PATH=${PATH}:/usr/lib/jvm/default/bin
/etc/profile.d/mozilla-common.sh:export MOZ_PLUGIN_PATH="/usr/lib/mozilla/plugins"
/etc/profile.d/perlbin.sh:[ -d /usr/bin/site_perl ] && PATH=$PATH:/usr/bin/site_perl
/etc/profile.d/perlbin.sh:[ -d /usr/lib/perl5/site_perl/bin ] && PATH=$PATH:/usr/lib/perl5/site_perl/bin
/etc/profile.d/perlbin.sh:[ -d /usr/bin/vendor_perl …Run Code Online (Sandbox Code Playgroud) 我正在从 Git for Windows 附带的 bash shell 切换到 Cygwin,但遇到了一个奇怪的问题。有人认为添加/cygdrive/到所有路径是个好主意,而我认为这是一个非常丑陋的主意。我已经能够确定我可以通过添加部分解决这个问题
mount --change-cygdrive-prefix /
export HOME=/c/Users/BZISAD0
Run Code Online (Sandbox Code Playgroud)
在我的 .bashrc 中,但如果我查看 PATH 变量,所有内容中仍然包含 /cygdrive/。我想我可以编写一个脚本来修复 PATH 但这比我已经在做的更麻烦。我们有了一个更好的办法,我敢确信那里是因为Git的bash shell中使用(据我所知)旧版本的Cygwin,它以某种方式配置为不前插/cygdrive无处不在。那么,如何将“Suck”旋钮调为零?

当我做
which pip3
Run Code Online (Sandbox Code Playgroud)
我得到
/usr/local/bin/pip3
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行时pip3,出现如下错误:
bash: /usr/bin/pip3: No such file or directory
Run Code Online (Sandbox Code Playgroud)
这是因为我最近删除了该文件。现在which命令指向的另一个版本pip3是位于/usr/local/bin但外壳还记得在错误的道路。我如何让它忘记那条路?
该which手册说
which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in
a strictly POSIX-conformant shell. It does this by searching the PATH for executable files matching the names of the arguments. It does not follow
symbolic links.
Run Code Online (Sandbox Code Playgroud)
双方/usr/local/bin并/usr/bin …
我在从 crontab 运行脚本时遇到问题。经过一番研究,我明白这个问题是因为 PATH 参数不包含 /sbin。
我查看了 /etc/crontab 中包含的内容:
PATH=/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
作为测试 - 打印 PATH 变量的简单 cron 作业:
* * * * * echo $PATH &> /root/TMP.log
Run Code Online (Sandbox Code Playgroud)
输出是:
cat /root/TMP.log
/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)
我不明白这种行为...如何设置 PATH 变量..?或者更好 - 如何向它添加路径?
我有几个项目需要我更改 Java/Grails/Maven 的版本。我正在尝试使用一些可以进行更改的脚本来处理此问题。例如:
#!/bin/sh
export JAVA_HOME=/cygdrive/c/dev/Java/jdk1.5.0_22
export PATH=$JAVA_HOME/bin:$PATH
export GRAILS_HOME=/cygdrive/c/dev/grails-1.0.3
export PATH=$GRAILS_HOME/bin:$PATH
export MAVEN_HOME=/cygdrive/c/dev/apache-maven-2.0.11
export PATH=$MAVEN_HOME/bin:$PATH
which java
which grails
which mvn
Run Code Online (Sandbox Code Playgroud)
执行此操作时,它成功地更改了脚本上下文中的 PATH,但随后脚本结束,并且没有完成任何更改。
如何以某种方式运行脚本以更改我当前工作的 shell 的 PATH?
我正在使用 Cygwin。