要从终端的任何地方访问脚本,可以使用以下命令序列:
PATH=$PATH:some_path_here
export PATH
Run Code Online (Sandbox Code Playgroud)
其中包括与所有子文件夹一起发送的路径中的所有文件。这意味着从那时起,只需键入存储在此文件夹结构中的脚本的名称即可执行它。
如何以这种方式仅导出单个文件而不是整个文件夹及其所有子目录?
如何防止 Zshell(和我假设的 Bash)在路径中扩展环境变量完成,如以下示例所示:
$PREFIX/alt/li
Run Code Online (Sandbox Code Playgroud)
应该扩展到
$PREFIX/alt/lib
Run Code Online (Sandbox Code Playgroud)
而不是说
/opt/alt/lib
Run Code Online (Sandbox Code Playgroud) 我在/opt/my-program/bin 中安装了一些程序,我想为所有用户的非登录shell 和登录shell 添加/opt/my-program/bin 到系统$PATH。我该怎么办?
更改 /etc/environment 对于非登录 shell 是可以的,但它不适用于登录 shell,因为 Debian 的 /etc/profile(将由登录 shell 提供)将覆盖 /etc/environment 中指定的 $PATH。
我需要在 CentOS 5.3 集群中调用程序的修改版本/home/user_name/bin而不是(旧)版本/opt/program_name/current。该程序使用 python 创建一个 tcsh 脚本,然后执行该脚本。
我可以覆盖 PATH 以在 中调用程序的修改版本~/bin,以便which program_name标识到~/bin的路径。我已经在这样做了.bashrc,.profile,.tcshrc,和.cshrc。但是,每次执行 tcsh 时,都会/etc/profile加载来自的环境变量,并且路径将恢复为/opt/program_name/current.
这些程序特定的变量在/etc/profile.d/program_name.sh被调用时设置/etc/profile:
# /etc/profile
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset iRun Code Online (Sandbox Code Playgroud)
因此,当program_name.sh被调用时,对应的脚本是:
# /etc/profile.d/program_name.sh
setenv PATH ${PATH}:/opt/program_name/currentRun Code Online (Sandbox Code Playgroud)
如何防止/etc/profile被我的用户帐户访问?
我没有 su 访问权限,其他用户仍在使用旧版本的软件,/opt/program_name/current因此我无法更新软件或修改其中的设置/etc/profile.d/program_name.sh
我有一个调用的脚本jsl在/usr/local/bin。运行which jsl在那里找到它。
我想暂时使用一个不同的版本,当echo $PATH我看到它/usr/bin在路径的早期。所以我添加了一个jsl在该文件夹中调用的脚本,并且我已经验证它是可执行的并且在使用完整路径调用时可以正确运行。
但是,which jsl仍然找到第一个版本,并且jsl仍然运行它。
为什么我的新人jsl没有which被姓名发现或被处决?
我正在尝试从 CentOS 中的源代码编译和安装boost 1.54。
文档非常简单,互联网上有很多教程 ( 1 ) ( 2 ) ( 3 )。这就是我所做的:
wget http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.gz
tar -xzvf boost_1_54_0.tar.gz
cd boost_1_54_0
./bootstrap.sh --prefix=/usr/local
./b2 install --with=all
Run Code Online (Sandbox Code Playgroud)
这是正确编译和安装boost /usr/local/lib,一切看起来都很好。
现在我编译其他需要使用 boost 的软件,gcc一切正常。根据我的理解,只要gcc找到所需的库,一切都应该没问题。
但现在的问题是:如果我运行我编译的二进制文件,我会收到以下错误:
./myProgram
./myProgramm: error while loading shared libraries: libboost_system.so.1.54.0: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么找不到库?
另外我试过:
ldconfig
locate boost
[...]
Run Code Online (Sandbox Code Playgroud)
但是找不到boost库。我手动寻找路径,它是:
/usr/local/lib/libboost_system.so.1.54.0
Run Code Online (Sandbox Code Playgroud)
我也尝试创建符号链接,/usr/lib但这也不能解决这个问题。
有任何想法吗?我能做什么?
我在 Internet 上以及 Unix 和 Linux 上发现了许多线程,以及有关查找进程路径的堆栈溢出帖子,到目前为止,我还没有成功应用任何方法。
我一直陷入proftpd展示而不是拥有一条道路。我终于阅读了man psAIX 并发现了这一点:
CMD
(-f、-l 和 l 标志)包含命令名称。在 -f 标志下,ps 尝试确定当前的命令名称和参数,这两者都可能被进程异步更改。然后显示这些。否则,将在没有选项 -f 的情况下显示的命令名称写在方括号中。
当我有以下输出时,我想确保理解这意味着什么:
ps -ef (truncate output)
root 44900 1 0 11:49:36 - 0:00 proftpd: (accepting connections)
nobody 31986 14976 0 13 feb - 0:00 /usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd.conf
Run Code Online (Sandbox Code Playgroud)
对于httpd守护程序,它确实显示完整路径,但不显示proftpd. 第一个问题是为什么有些进程显示完整路径而有些没有?
第二个问题是针对这种情况的:
我可以假设 的路径proftpd是第一个我会发现输入whereis为的路径root吗?
就我而言:
whereis proftpd
proftpd: /etc/proftpd.conf …Run Code Online (Sandbox Code Playgroud) 我已经安装了一些工具并将其放在 $HOME/tools/ 下,每个工具都有自己的 /bin 目录,其中包含可执行程序。我现在在 $HOME/.bashrc 文件中有每个单独的 /bin 的路径,如下所示:
export PATH=$PATH:$HOME/tools/tool1/bin
export PATH=$PATH:$HOME/tools/tool2/bin
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以为所有工具编写以下内容?
export PATH=$PATH:$HOME/tools
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,那么最好的方法是什么?
这是来自的输出which -a autoconf:
/usr/bin/autoconf
/usr/bin/autoconf
/home/amumu/root/bin/autoconf
Run Code Online (Sandbox Code Playgroud)
我想在我的主目录中使用 autoconf,因为与服务器中的默认版本相比,它是较新的版本。如何将其设置为默认值?我不想覆盖/usr/bin/autoconf或写入/usr/local/bin
path ×10
bash ×2
shell ×2
aix ×1
autocomplete ×1
boost ×1
centos ×1
command-line ×1
debian ×1
dependencies ×1
libraries ×1
ps ×1
shell-script ×1
tcsh ×1
zsh ×1