我曾经sshfs
将远程文件夹远程挂载到本地计算机,问题是我需要一种方法来知道我正在本地计算机上的远程文件夹或local
文件夹下工作,以避免意外伤害远程文件夹。
如何让 zsh/bash 提示以反映我当前处于远程挂载点,以便我会更仔细地执行操作?
示例: sshfs now 当我 cd to 时local_of_remote_mountpoint
,提示将通知我这是使用sshfs
如下方式安装的文件夹:user@host: sshfs% ls
我曾经sshfs
将远程文件夹远程挂载到本地计算机,问题是我需要一种方法来知道我正在本地计算机上的远程文件夹或local
文件夹下工作,以避免意外伤害远程文件夹。
如何让 zsh/bash 提示以反映我当前处于远程挂载点,以便我会更仔细地执行操作?
示例: sshfs now 当我 cd to 时local_of_remote_mountpoint
,提示将通知我这是使用sshfs
如下方式安装的文件夹:user@host: sshfs% ls
我们在这里面临两个不同的问题:
sshfs
;挂载的文件系统上文件系统的当前工作目录的一部分是由 安装的
sshfs
吗?将 PWD 与挂载点进行比较是不可靠的。例如,如果您的 PWD 的一个组件是一个挂载点的符号链接,它可能不起作用。
df
在 GNU/Linux 上,工具findmnt
能够确定目录所在的挂载点。此外,两者都可以报告FSTYPE
文件系统的属性,该属性设置fuse.sshfs
为由sshfs
.因此,您可以检查:
或者:
您可以将此测试包装在一个脚本中,并使其在您的
PATH
. 在这里,我们将调用它check_sshfs_mp
:如何根据我们所在的挂载点设置 shell 提示符?
在两者中
bash
,zsh
您都可以设置PS1
shell 变量,该变量被扩展为主要提示。在
bash
您可以在相关功能的包装器中执行此操作:cd
和pushd
(popd
感谢:感谢对“Conditional PS1”的回答提醒我cd
不是唯一的),将此代码添加到您的~/.bashrc
:该
chpwd
函数调用check_sshfs_mp
,如果其退出状态为0
,则向 中添加一个红色R
字母PS1
。您可能需要根据自己的喜好调整默认值。
PS1
在
zsh
某种程度上更容易,因为只要当前工作目录发生更改,就会zsh
执行特殊功能(参考:Z Shell 手册,特殊功能)。您可以将提示设置函数添加到与 一起执行的钩子函数数组中。 假设您没有使用干扰提示设置的用户贡献,您可以将此代码添加到您的:chpwd
chpwd
~/.zshrc
同样,我们只是在成功
R
时向主提示添加红色。chech_sshfs_mp
请注意,如果您的终端启动的 PWD 位于已安装的文件系统上,则包装
cd
和添加chpwd_functions
挂钩函数将无法确保正确设置提示。sshfs
您至少需要 acd
来触发正确的提示,这可能会产生误导。用户对
zsh
执行提示主题的贡献将需要临时解决方案来自定义提示。您仍然可以关闭提示主题
试验这段代码。
评论中提出的积分点
zsh
:如果您更喜欢使用ANSI 转义序列(而不是颜色名称)指定提示着色,您可以
PS1
将上述代码片段中的赋值行更改为:或者
请注意,
print
需要将\e
s 转换为实际的转义字符,并且%{...%}
需要表单以避免提示代码行为不端。参考:zsh
常见问题解答:如何在我的颜色 xterm 上获得彩色提示?如果您希望在每次设置主要提示时都执行检查,您可以避免将钩子函数添加到
chpwd_functions
并添加到您的.zshrc
:需要该
PROMPT_SUBST
选项才能在提示显示中启用命令替换。参考: Z Shell 手册中的提示扩展。按照@fra.san 的建议,您可以通过调整来修改 LOCAL 提示,
PS1
以反映路径中的文件夹是使用sshfs
.首先检查您的终端是否支持颜色提示。
~/.kshrc
在 yr或中包括以下内容~/.bashrc
:接下来,每次使用 wrapper 在本地 FS 上挂载远程卷时
sshfs_wrp
,都会自动将该挂载的远程卷的路径附加到临时文件,例如/tmp/tmp_rem_vol
. 您可以使用 sshfs 命令的简单包装器来执行此操作:确保脚本是可执行的,并且它的位置可以通过 PATH 环境变量访问。
接下来,在您的
~/.kshrc
or中定义一个函数~/.bashrc
来设置一个标志变量 ,remFlag
以防[R]
字符串"$(pwd)"
表明您当前在远程卷子树中工作,该子树以前使用sshfs_wrp
. 我用于case
便携性。编辑: 请注意,一旦在
case
模式匹配部分找到匹配项,就必须退出 while 循环。最后,
PS1
在 yr 中修改 yr 提示符,~/.kshrc
或者~/.bashrc
通过在提示符中包含远程卷标志 ,rem_vol
以亮绿色,以防使用sshfs_wrp
.可以改进此解决方案以减少移动部件的数量并改进
/tmp/tmp_rem_vol
临时文件或文件的创建,以防多个 ssh 连接共存并且远程卷从不同的远程主机安装。这对于Debian 或 Arch Lx 平台上的一个
bash
或shell内的一个 ssh 连接都应该有效。ksh
在卸载远程卷、会话注销或关闭 ssh 连接时,您还应该注意擦除
/tmp/tmp_rem_vol
以避免持久性问题。您会发现大量的参考资料和提示也可以实现自动化。高温高压