标签: path

如何正确添加路径到PATH?

我想知道必须向PATH环境变量添加新路径的位置。我知道这可以通过编辑来完成.bashrc(例如),但不清楚如何做到这一点。

这边走:

export PATH=~/opt/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

或这个?

export PATH=$PATH:~/opt/bin
Run Code Online (Sandbox Code Playgroud)

bash path environment-variables bashrc

1174
推荐指数
11
解决办法
278万
查看次数

cron 执行作业时的“工作目录”是什么?

我有一个脚本,当我从命令行运行它时cron,它可以工作,但是当我用它来安排它时,我收到了找不到文件或命令的错误。我的问题是双重的:

  1. 当我使用 调度 cron 作业时crontab -e,它是否使用我的用户 ID 作为其权限的基础?或者它是否使用某种类型的 cron 用户 ID 及其相关权限?

  2. 启动 cron 作业时,工作目录是什么?它是我指定要运行的脚本的目录,还是其他目录?

这是我的 cron 工作:

15 7 * * * /home/xxxx/Documents/Scripts/email_ip_script.sh
Run Code Online (Sandbox Code Playgroud)

这是实际的脚本:

vIP_ADDR="`curl automation.whatismyip.com/n09230945.asp`"
echo "$vIP_ADDR"
sed "s/IPADDR/$vIP_ADDR/g" template.txt > emailmsg.txt
ssmtp XXXXX@gmail.com < emailmsg.txt
Run Code Online (Sandbox Code Playgroud)

以下是我在查看由mail产生的消息时得到的错误cron

sed: can't read template.txt: No such file or directory
/home/xxxx/Documents/Scripts/email_ip_script.sh: line 15: ssmtp: command not found
Run Code Online (Sandbox Code Playgroud)

它找不到,template.txt但它与脚本位于同一目录中。它也不能运行ssmtp,但我可以作为我的用户。我缺少什么才能使其正常工作?

cron directory path cd-command

217
推荐指数
5
解决办法
23万
查看次数

如何让`sudo` 保留$PATH?

我有一个程序安装在 /opt 下的自定义目录中。为了更容易运行它,我编辑了我的 bashrc 以将所述目录添加到我的路径中:

export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
Run Code Online (Sandbox Code Playgroud)

如果我想在没有 sudo 的情况下运行程序,这很好用。但是,如果我尝试使用 sudo 运行它,它会因“找不到命令”错误而失败。

$ sudo godi_console
sudo: godi_console: command not found
Run Code Online (Sandbox Code Playgroud)

使用 sudo 后检查 PATH 变量表明它不包括我作为普通用户所拥有的相同 PATH:

$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)

为什么 PATH 不一样?难道我做错了什么?我在 Debian Jessie 上,如果它有所作为。

我尝试的一件事是直接调用 /opt/godi/sbin/godi_console,将绝对路径传递给可执行文件。不幸的是,这在这种特殊情况下没有帮助,因为 godi_console 本身取决于正确设置的 PATH。

sudo path

164
推荐指数
5
解决办法
13万
查看次数

如何设置用户环境变量?(永久,不是会话)

这让我很恼火。我看到了几个建议(都使用不同的文件和语法),但都没有奏效。

如何为特定用户设置环境变量?我在 debian 挤压。我应该在文件中放入 ABC = "123" 的确切语法是什么?

path environment-variables

161
推荐指数
4
解决办法
53万
查看次数

可执行文件在运行时在哪里查找共享对象?

我了解如何在链接/编译时定义包含共享对象。但是,我仍然想知道可执行文件*.so在执行时如何查找共享对象(库)。

例如,我的应用程序a.out调用lib.so库中定义的函数。编译后,我移动lib.so到我的$HOME.

我怎么知道a.out去那里找呢?

compiling path executable dynamic-linking

159
推荐指数
3
解决办法
18万
查看次数

哪些发行版在 $PATH 中有 $HOME/.local/bin?

示例:在 Ubuntu 中,.local主目录中始终有一个目录,并.profile包含以下行:

PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

$HOME/.local/bin默认情况下不存在,但如果创建它,它已经存在$PATH并且可以找到其中的可执行文件。

这在XDG 目录规范中没有完全提到,但似乎是从它派生出来的。

我想知道这是否足够普遍,以至于通常可以假设它存在于最常见的最终用户发行版中。例如,是在所有 Debian 衍生产品中,还是至少在 Ubuntu 衍生产品中?Red Hat/Fedora/CentOS 生态系统如何?等等 Arch、Suse 以及人们现在使用的东西。

更明确地说,这仅适用于$HOME/.local/bin而不 适用于$HOME/bin

出于好奇,如果您有相关信息,请随意包括 BSD、OS/X 和其他。:)

path xdg distributions

82
推荐指数
2
解决办法
4万
查看次数

$PATH 中的重复条目有问题吗?

我的一些朋友的 bashrc 来源。所以我最终在 $PATH 变量中有重复的条目。我不确定这是否是命令需要很长时间才能启动的问题。$PATH 在 bash 内部如何工作?有更多的 PATHS 会减慢我的启动时间吗?

bash path

62
推荐指数
3
解决办法
4万
查看次数

使用 awk 命令删除重复的 $PATH 条目

我正在尝试编写一个 bash shell 函数,它允许我从 PATH 环境变量中删除目录的重复副本。

有人告诉awk我,可以通过使用该命令的单行命令来实现这一点,但我不知道该怎么做。有人知道怎么做吗?

shell bash path awk

58
推荐指数
5
解决办法
3万
查看次数

以人类可读的方式显示 PATH

我想以更易读的方式显示我的 PATH 环境变量。

$ echo $PATH
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin:/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/bin:/usr/local/git/bin:/Users/arturo/.gvm/groovy/current/bin:/Users/arturo/.gvm/grails/current/bin:/Users/arturo/.gvm/griffon/current/bin:/Users/arturo/.gvm/gradle/current/bin:/Users/arturo/.gvm/lazybones/current/bin:/Users/arturo/.gvm/vertx/current/bin:/Users/arturo/.gvm/bin:/Users/arturo/.gvm/ext:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin
Run Code Online (Sandbox Code Playgroud)

我在想这样的事情:

$ echo $PATH | some cut and awk magic
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/bin
...
Run Code Online (Sandbox Code Playgroud)

shell path environment-variables

57
推荐指数
2
解决办法
2万
查看次数

为什么通过 sudo 和 su 运行时 PATH 变量不同?

在我的 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

linux shell sudo path environment-variables

52
推荐指数
4
解决办法
5万
查看次数