当我在没有指定可执行文件的完整路径的情况下执行程序时,Bash 必须搜索其中的目录$PATH才能找到二进制文件,似乎 Bash 会记住某种缓存中的路径。例如,我安装了从源代码到 的 Subversion 版本/usr/local,然后svnsync help在 Bash 提示符下键入。Bash 找到了/usr/local/bin/svnsync“svnsync”的二进制文件并执行了它。然后当我删除 Subversion 中的安装/usr/local并重新运行时svnsync help,Bash 响应:
bash: /usr/local/bin/svnsync: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是,当我启动一个新的 Bash 实例时,它会找到并执行/usr/bin/svnsync.
如何清除可执行文件路径的缓存?
我有一个脚本,当我从命令行运行它时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,但我可以作为我的用户。我缺少什么才能使其正常工作?
我希望我的默认 bash shell 直接进入 tmux,而不是每次都必须输入 tmux。
在 linux 下,我通过键入(例如,fluidplot)来启动一个软件。如何找到这个软件的安装路径?
当我使用shebang#!/usr/bin/env python运行脚本时,系统如何知道python使用哪个?如果我python在环境变量中寻找 bin 路径,我什么也找不到。
env | grep -i python
Run Code Online (Sandbox Code Playgroud) 作为 Linux 用户,我一直只使用 bash,因为它是我使用的每个发行版的默认设置。使用其他 Unix 系统(如 BSD)的人似乎更频繁地使用其他 shell。为了多学习一点,我决定尝试一下 zsh。
作为 bash 用户:
在 bash 子 shell 中,运行 cd 时出现以下错误
sudo: cd: command not found
Run Code Online (Sandbox Code Playgroud)
这是意料之中的,因为我没有路径。通常要解决这个问题,我只提供完整路径,如下所示:(/usr/local/bin/foo)
令我惊讶的是,cd它似乎不在任何正常的地方。
which cd
whereis cd
ls /bin | grep cd
Run Code Online (Sandbox Code Playgroud)
相比之下,ls正是我所期望的。
which ls
/bin/ls
Run Code Online (Sandbox Code Playgroud)
cd命令位于何处?为什么与所有其他命令不同?
更新
另一个有趣的花絮,cd 没有出现在 hash
hash
0 /bin/ls
2 /usr/bin/find
2 /sbin/ip
1 /usr/bin/updatedb
1 /usr/bin/apt-get
Run Code Online (Sandbox Code Playgroud) set没有参数的命令有什么作用?
正如我所看到的,它像env命令一样打印出我的环境变量,但按字母顺序排列。并进一步打印一些不同的信息(变量?函数?),例如:
__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
quote_readline ()
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
Run Code Online (Sandbox Code Playgroud)
它是什么,它来自哪里?
我找不到有关set没有参数的命令的信息。实际上,我的 Linux 发行版中根本没有man页面set。
我对 *nix 有一些疑问。
我不知道是哪种类型的可执行文件ls,无论是 .sh 还是 .ksh 或任何其他类型的系统可执行文件(如果是),那是什么?
当我试图查看ls命令的源代码是什么样子时,它显示了一些不可读的东西,*nix 使用什么方法来创建这些类型的不可读文件,我可以使我的文件类似于这些文件(例如ls- 不可读)。