通过 ssh 连接时,~/bin 中的脚本不起作用

通过 ssh 连接时,~/bin 中的脚本不起作用

我的$HOME/bin文件夹中有一些脚本。当我远程访问我的计算机时,我无法使用它们,我不明白为什么。当我在远程计算机前时,它们工作正常。

我认为这可能与文件有关.bashrcPATH设置为

PATH=$PATH:$HOME/bin
export PATH

但对我来说这似乎是正确的。

我也尝试过在注销后再复制文件夹中的文件/usr/bin并重新登录,但仍然无法使用我的脚本。

如果我进入~/bin目录并输入./myscript脚本工作(只是我需要从需要处理一些文件的不同文件夹运行它)。

答案1

发生这种情况的原因是,当你通过 SSH 登录时,你获得的 shell 是登录外壳。相反,用文档中的术语来说bash,当你在已经启动的图形登录会话中打开终端窗口时,你获得的 shell 仍然是交互式外壳但它是不是登录 shell

man bash

什么时候狂欢被调用为一个交互式登录 shell,或者被调用为一个非交互式 shell,- 登录选项,它首先从文件 读取并执行命令 /etc/profile(如果该文件存在)。读取该文件后,它会按顺序查找~/.bash_profile~/.bash_login~/.profile,然后从第一个存在且可读的文件中读取并执行命令。 --无配置文件启动 shell 时可以使用选项来抑制这种行为。

当登录 shell 退出时,bash 将从文件读取并执行命令~/.bash_logout(如果存在)。

当启动非登录 shell 的交互式 shell 时,bash 将从 /etc/bash.bashrc和 读取并执行命令~/.bashrc(如果这些文件存在)。这可以通过使用 --norc选项。--rc文件 文件选项将强制 bash 读取并执行来自文件而不是/etc/bash.bashrc~/.bashrc

因此您应该检查您是否拥有以下任何文件:

  • ~/.bash_profile

  • ~/.bash_login

  • ~/.profile

如果有的话,那么你应该编辑你找到的第一个文件并将其添加$HOME/bin到你的路径中。如果没有,请为此目的创建一个。(最好创建一个,~/.profile因为其他 shell 也会使用它。)

您几乎肯定有~/.profile,因为 Ubuntu 的默认行为是使用任何新用户帐户(包括安装 Ubuntu 时创建的第一个帐户)创建它。

bin但是,默认情况下此文件已经包含将您的私人目录添加到所需的行$PATH

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

因此,这对您来说不起作用,这有点奇怪。

根据您的需要,您可能想要拨打~/.profile(或~/.bash_login~/.bash_profile)电话~/.bashrc

source ~/.bashrc

但更好的方法是只在in (或或)$HOME/bin中添加几行,但是$PATH~/.profile~/.bash_login~/.bash_profile不是 ~/.bashrc。毕竟,如果您对每个登录 shell 都执行此操作,那么当您以图形方式登录时也应该会发生这种情况,并由所有非登录 shell 的交互式 shell 继承。

答案2

只需将您的配置放入.bash_配置文件主目录中的文件。

如果你没有,你可以创建它。

相关内容