我想知道必须向PATH环境变量添加新路径的位置。我知道这可以通过编辑来完成.bashrc(例如),但不清楚如何做到这一点。
这边走:
export PATH=~/opt/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
或这个?
export PATH=$PATH:~/opt/bin
Run Code Online (Sandbox Code Playgroud) 我有一个脚本,当我从命令行运行它时cron,它可以工作,但是当我用它来安排它时,我收到了找不到文件或命令的错误。我的问题是双重的:
当我使用 调度 cron 作业时crontab -e,它是否使用我的用户 ID 作为其权限的基础?或者它是否使用某种类型的 cron 用户 ID 及其相关权限?
启动 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,但我可以作为我的用户。我缺少什么才能使其正常工作?
我有一个程序安装在 /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。
这让我很恼火。我看到了几个建议(都使用不同的文件和语法),但都没有奏效。
如何为特定用户设置环境变量?我在 debian 挤压。我应该在文件中放入 ABC = "123" 的确切语法是什么?
我了解如何在链接/编译时定义包含共享对象。但是,我仍然想知道可执行文件*.so在执行时如何查找共享对象(库)。
例如,我的应用程序a.out调用lib.so库中定义的函数。编译后,我移动lib.so到我的$HOME.
我怎么知道a.out去那里找呢?
示例:在 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 和其他。:)
我的一些朋友的 bashrc 来源。所以我最终在 $PATH 变量中有重复的条目。我不确定这是否是命令需要很长时间才能启动的问题。$PATH 在 bash 内部如何工作?有更多的 PATHS 会减慢我的启动时间吗?
我正在尝试编写一个 bash shell 函数,它允许我从 PATH 环境变量中删除目录的重复副本。
有人告诉awk我,可以通过使用该命令的单行命令来实现这一点,但我不知道该怎么做。有人知道怎么做吗?
我想以更易读的方式显示我的 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) 在我的 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?