我正在尝试将文件夹添加到 PATH 变量(仅针对特定用户)。
因此我在 ~/.bashrc 中添加了
export PATH=$PATH:/home/username/Tools/scripts/
在此文件夹中,我有一些脚本和一些其他程序的快捷方式(例如:firefox.sh)
当我打开新终端时,路径变量是正确的,但是当我尝试执行“ sh firefox
”时,我收到“没有这样的文件”。
我希望能够为该用户从终端的任何文件夹执行任何 *.sh 脚本我做错了什么?
答案1
搜索路径中的脚本应该具有唯一的名称(与其他系统命令(包括 shell 内建命令)不同) 即避免使用诸如 之类的名称firefox, vlc, nano, echo, cd, test, sudo ... etc
。
搜索路径中的脚本由文件名运行(包括扩展名,例如.sh
如果使用)而不指定 shell 解释器(这些是可执行文件,它们以带有完整路径或脚本命令字符串的脚本文件作为参数,但不是仅通过文件名调用的路径中的可执行文件/脚本文件),而是包括一个舍邦在其中即不是像这样:
sh scriptname
而是像这样:
scriptname
搜索路径中的脚本需要包含 shebang(脚本的第一行告诉应该使用什么解释器来运行脚本) 如下所示:
#!/bin/bash
或这个:
#!/bin/sh
或者甚至是这样的:
#!/bin/python3
等等。
首先需要使搜索路径中的脚本可执行,如下所示:
chmod +x /full/path/to/scriptname
这就是它们的工作方式。
答案2
bash
和sh
是不同的 shell。我相信~/.bashrc
不会被 读取。尝试将您的附加内容放入应该被所有 shell 读取的sh
路径中。~/.profile
此外,您写道,您的脚本被调用firefox.sh
,因此您还需要引用它sh firefox.sh
- 但这可能仍然不起作用,因为搜索路径仅针对可执行文件进行评估,而在这种情况下,您尝试加载脚本sh
而不是直接执行它。
尝试
sh `which firefox.sh`
firefox.sh
首先解析路径。如果模式为“x”,则也会分叉( chmod +x firefox.sh
)