标签: path

Unix 安装最佳实践,附加到路径或链接

我有一些即将发布的软件(研究生项目),我想知道在 UNIX 机器上安装软件的最佳实践是什么。

我最初是通过/usr/local/bin我的项目链接的,但最近我考虑通过附加到.bashrc特定用户的文件来安装它,特殊情况是如果用户是 root,它会附加到全局路径而不是特定于用户的路径。

这为我带来了一些简单的功能添加,因为我可以通过将单个变量添加到.bashrc安装用户的文件夹中来快速链接到其他资源。

然而,我开始怀疑这个决定。

附加到路径还是不附加到路径,这就是问题。无论是 中的符号链接更高贵/usr/local/bin,还是拿起武器并附加到不断增长的路径变量中。

更多信息:

它是一个带有 TCL 前端的 C++ 后端。TCL 前端还启动了一个 java 存档(在我职业生涯的早期创建)。除此之外,还有 TCL 前端的扩展,可以使用自己的 TCL 解释器来运行另一个程序。我需要使用解释器向程序提供 bwidget tcl 包。因此,提供 bwidget 包并启动 jar 文件需要有一个链接到的位置。此外,我需要让用户感到轻松,因为他们主要是化学用户,不太熟悉 UNIX,可能使用 mac。

该平台需要在 Mac 或 Unix 上运行。

理想情况下,我希望用户能够使用单个命令启动 TCL 脚本,而不是让他们记住位置。

这是一个以前封闭源代码的项目,现在是开源的,我们希望用户能够轻松编译和安装该程序

我正在使用 make 创建安装选项。

path software-installation

5
推荐指数
1
解决办法
1696
查看次数

Crontab + Ruby on Rails:/usr/bin/env:ruby:没有这样的文件或目录

我有一个 ruby​​ on Rails 应用程序,我需要为 rake 任务安排一个 crontab。

*/5 * * * * RAILS_ENV=production /usr/local/bin/rake -f /usr/local/www/mysite-web-production/current/Rakefile my_site:export_products >> /var/log/export_feed.log 3>&1
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用(当我手动执行它时它可以工作,但不能作为 crontab)并且它向我显示/usr/bin/env: ruby: No such file or directory. 我没有使用RVM。我在 Linux 上使用 ruby​​ 1.9.3 和 Rails 3。

cron path ruby

5
推荐指数
1
解决办法
7076
查看次数

/etc/environment 不工作

我使用的是 Ubuntu 12.04。

最近不小心删除了python,导致大量的包被卸载。我重新安装了它们,但现在遇到了问题。

$ echo $PATH
/home/paul/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/paul/.rvm/bin
Run Code Online (Sandbox Code Playgroud)

请注意,没有/sbin/usr/local/sbin

我不知道那是怎么发生的!

因此,

$ sudo apt-get autoremove -y
...
dpkg: warning: 'ldconfig' not found in PATH or not executable
...
$ sudo shutdown now
sudo: shutdown: command not found.
Run Code Online (Sandbox Code Playgroud)

我去找找了 /etc/environment(我没有碰过)有

$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
Run Code Online (Sandbox Code Playgroud)

我已经重新启动(几次)。为什么我的路径没有/sbin

更新

我尝试创建一个新用户

$ sudo adduser paul-test
$ su -- paul-test
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)

还,

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

所以有些东西/sbin对我来说是致命的。

我查过了.bashrc …

ubuntu path

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

Bash one-liner 临时附加链接命令的路径而不需要额外的 bash 调用?

考虑一下:

$ cd /tmp
$ echo "echo YES" >> prog/myprog
$ chmod +x prog/myprog
$ prog/myprog
YES
$ myprog
myprog: command not found
Run Code Online (Sandbox Code Playgroud)

我可以临时修改PATHmyprog按名称调用,如下所示:

$ PATH="$PATH":$(readlink -f prog) myprog
YES
Run Code Online (Sandbox Code Playgroud)

...但是我不能用这种方法链接命令:

$ PATH="$PATH":$(readlink -f prog) myprog && myprog
YES
myprog: command not found
Run Code Online (Sandbox Code Playgroud)

...显然修改后的PATH显然没有传播到第二次调用。

我知道我可以这样做:

$ PATH="$PATH":$(readlink -f prog) bash -c "myprog && myprog"
YES
YES
Run Code Online (Sandbox Code Playgroud)

...但是我必须调用一个额外的bash过程 - 更糟糕的是,我必须引用。

有没有什么方法可以将单行中的链接命令临时附加到 PATH 中,而不必调用 extrabash和引用?尝试反引号,它们不起作用:

$ PATH="$PATH":$(readlink -f prog) `myprog && myprog` …
Run Code Online (Sandbox Code Playgroud)

bash path environment-variables

5
推荐指数
1
解决办法
1698
查看次数

为桌面启动器设置路径环境变量

我设置自定义$PATH~/.bashrcPATH=$HOME/.bin:$PATH。当我geany从终端启动它时,它能够找到位于$HOME/.bin. 当我使用 XFCE 启动器启动 Geany 时,它不会选择自定义路径并且我的自定义构建工具不起作用。是否可以设置自定义路径以便启动器将其选中?我宁愿不必创建自定义.desktop文件。

虽然是有“的.bashrc”等同文件中读取所有炮弹?如果我知道当我使用快捷方式启动程序时使用什么 shell 以及该 shell 是如何启动的,就会提供答案。据推测,它不是交互式 bash shell,否则.bashrc将被获取。

path environment-variables desktop-shortcuts

5
推荐指数
1
解决办法
9838
查看次数

`sudo <command>` 使用哪个 PATH 来搜索 `<command>`?

我在我的主目录中安装了 eclipse,并将其路径PATH放在~/.profile.

所以它的工作原理

$ eclipse 
Run Code Online (Sandbox Code Playgroud)

但是当用 调用它时sudoeclipse没有找到:

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

PATHsudo eclipse用于搜索eclipse?是用户rootPATH吗?

谢谢。

sudo path

5
推荐指数
1
解决办法
580
查看次数

破坏了我的 Debian 安装:在 PATH 中找不到“sh”

我正在运行Debian buster/sid. 我错误地运行似乎破坏了很多东西apt-get dist-upgrade(我认为这就是它所做的)。所以桌面管理器\桌面环境根本不再加载,我只得到一个命令行外壳。

Aptitude 和 apt-get 与 dpkg 一样已损坏。

apt update、aptitude update 和 apt-get update 失败并在尝试运行时出现很多错误,但是我的 /etc/apt/sources.list 看起来不错

deb http://ftp.ie.debian.org/debian unstable main contrib non-free
deb-src http://ftp.ie.debian.org/debian unstable main contrib non-free
deb http://ftp.ie.debian.org/debian experimental main contrib non-free
deb-src http:// ftp.ie.debian.org/debian experimental main contrib non free
deb https://dl.winehq.org/wine-builds/debian sid main
deb https://dl.winehq.org/wine-builds/ubuntu sid main
Run Code Online (Sandbox Code Playgroud)

更新错误如下:

Err:2 http://ftp.ie.debian.org/debian unstable InRelease
Couldn't execute /usr/bin/apt-key to check /var/lib/apt/lists/partial/ftp.ie.debian.org_debian_dists_experimental_InRelease
Run Code Online (Sandbox Code Playgroud)

E: Problem executing scripts APT::Update::Post-Invoke-Success '/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S …
Run Code Online (Sandbox Code Playgroud)

bash kde debian dpkg path

5
推荐指数
2
解决办法
4855
查看次数

安装的程序可执行文件从错误的位置运行

我安装parcellite在 Ubuntu(从http://parcellite.sourceforge.net/下载)

从源代码安装后sudo make install,我可以看到它安装在以下位置。

但是,当我尝试运行它时,它会尝试从另一条路径运行它。这是为什么?

user$ which parcellite
/usr/local/bin/parcellite

user$ parcellite -h
bash: /usr/bin/parcellite: No such file or directory
Run Code Online (Sandbox Code Playgroud)

$PATH 如下

/home/user/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

我尝试如下更改可执行文件的所有权。问题仍然存在。

user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 root root 452K Oct  7 21:00 /usr/local/bin/parcellite
user$sudo chown user:user /usr/local/bin/parcellite
user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 user user 452K Oct  7 21:01 /usr/local/bin/parcellite
Run Code Online (Sandbox Code Playgroud)

我安装了旧版本的parcellite。但我在安装新版本之前将其删除。


更新:@Fox 的解决方案有效。但是知道为什么which命令给出了正确的路径,尽管hash没有更新?

bash ubuntu path gnome-shell parcellite

5
推荐指数
1
解决办法
421
查看次数

“which”即使运行也找不到可执行文件的位置

背景

我登录服务器进行科学计算。它运行“科学 Linux 7.4 版”。

为了访问不同的软件,我必须运行像“模块加载 x”这样的命令。例如,要使用 python,我需要编写“模块加载 python”。我对这个模块系统了解不多,但据我所知,它只是修改了一些环境变量。输入“module show python”显示

module-whatis    This module sets up PYTHON 3.6 in your environment.
conflict         python
append-path      MODULEPATH /global/software/sl-7.x86_64/modfiles/python/3.6
setenv           PYTHON_DIR /global/software/sl-7.x86_64/modules/langs/python/3.6
prepend-path     PATH /global/software/sl-7.x86_64/modules/langs/python/3.6/bin
prepend-path     CPATH /global/software/sl-7.x86_64/modules/langs/python/3.6/include
prepend-path     FPATH /global/software/sl-7.x86_64/modules/langs/python/3.6/include
prepend-path     INCLUDE /global/software/sl-7.x86_64/modules/langs/python/3.6/include
prepend-path     LIBRARY_PATH /global/software/sl-7.x86_64/modules/langs/python/3.6/lib
prepend-path     PKG_CONFIG_PATH /global/software/sl-7.x86_64/modules/langs/python/3.6/lib/pkgconfig
prepend-path     MANPATH /global/software/sl-7.x86_64/modules/langs/python/3.6/share/man
Run Code Online (Sandbox Code Playgroud)

当我加载 python 时,我也可以访问 conda(其可执行文件位于 /global/software/sl-7.x86_64/modules/langs/python/3.6/bin)。

问题

通常我不能在没有先加载 python 模块的情况下运行 conda。但最近我注意到这发生了变化,现在我可以在不加载 python 模块的情况下运行 conda。这让我很困惑,所以我输入了“which conda”来查看是否可以找到正在运行的可执行文件,但是当我这样做时,它说在我的 PATH 变量上的任何目录中都找不到 conda。

尽管我仍然可以运行 conda,但“which”怎么可能找不到 conda 可执行文件?

path which

5
推荐指数
1
解决办法
1198
查看次数

如何修改 Catalina 中的 PATH 环境变量?

一些应用程序告诉我向 PATH 环境变量添加一些东西,我知道一种方法是通过在 处创建一个文件~/.zshrc,但我想知道变量PATH=...存储在哪里?

当我打字时,echo $PATH我得到:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Applications/Xamarin Workbooks.app/Contents/SharedSupport/path-bin
Run Code Online (Sandbox Code Playgroud)

/etc/paths我得到的文件中:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Run Code Online (Sandbox Code Playgroud)

那么哪个文件附加了额外的路径?


回复评论:

我得到了:(原谅我把用户名改成了alice

grep: /Users/alice/.profile: No such file or directory
grep: /etc/environment: No such file or directory
grep: /etc/zsh/zprofile: No such file or directory
grep: /Users/alice/.zshrc: No such file or directory
grep: /Users/alice/.profile: No such file or directory
Run Code Online (Sandbox Code Playgroud)

zsh path environment-variables macos

5
推荐指数
1
解决办法
8631
查看次数