使用管道 LINUX 在 shell 脚本中输出 PROMPT_COMMAND

使用管道 LINUX 在 shell 脚本中输出 PROMPT_COMMAND

我想制作一个 shell 脚本,显示根目录上的可用数据,并通过在 shell 脚本中使用 PROMPT_COMMAND 在提示中的每个新命令后连续显示它。但是,我可以获得可用数据,但我不知道如何应用 PROMPT_COMMAND 来读取可用数据以使其正常工作。我必须专门使用 PROMPT_COMMAND 来执行此操作。

现在我的脚本中有这个:

df -h /root |awk '{print $4}'| grep "." | PROMPT_COMMAND= ""

关于如何在我的脚本中使用 PROMT_COMMAND 以便它工作并给我正确的输出有什么想法吗?

我确实在使用bash。 grep 函数确实是多余的。

答案1

$PROMPT_COMMAND是特定于bash外壳的。它是一个特殊的变量,旨在包含在显示每个提示之前评估的 bash 代码,因此它仅与交互式 shell(而不是脚本)相关,并且应该类似于:

PROMPT_COMMAND='
  available_space_on_root_fs=$(df -h --output=avail /)
  available_space_on_root_fs=${available_space_on_root_fs##*[[:space:]]}
'
PS1='$available_space_on_root_fs$ '

您通常会将其放入您的源中(当 shell 是交互式时,您的源~/.bashrc中会有一些代码)。~/.bash_profile~/.bashrc

在 中zsh,等价的是precmd函数。虽然您还可以在设置选项后在提示中进行参数扩展promptsubst,但设置psvar nth元素并以通常更安全的方式引用它们:%nv

precmd() psvar[1]=${$(df -h --output=avail /)[-1]}
PS1='%1v$ '

(在~/.zshrc

除了设置全局precmd钩子之外,您还可以向数组添加函数名称precmd_functions

determine-avail-space() psvar[1]=${$(df -h --output=avail /)[-1]}
precmd_functions+=(determine-avail-space)
PS1='%1v$ '

上面假设和选项df是GNU (后者现在在很多其他实现中都可以找到)。在 Linux 上,另请参阅给出不带标头的结果。--output=avail-hfindmnt -no avail /

请注意,我们所说的根 FS 是挂载在/./root通常是用户的主目录root/root始终位于根文件系统上,因为即使未安装其他文件系统,根帐户也可用且完全可操作,这一点很重要df /,因此df /root应该为您提供相同的信息。

答案2

那就是命令:

df -h /root |awk '{print $4}'| grep "."

PROMPT_COMMAND 是一个保存命令的变量。所以:

PROMPT_COMMAND="df -h /root |awk '{print $4}'| grep \".\""

完毕。

答案3

如果您希望 homedir 的大小显示在常用提示符前面,并且正在使用 bash:

#you can place the later inside your .bashrc once you are satisfied it works:
PROMPT_COMMAND=' df -h ~ | tail -n 1 | awk '\''{print $(NF-2),$(NF-1), $NF }'\'' | xargs printf "%s " '

# this will display:  available, %of_usage, and name  before your usual prompt:
354Mb 68% /root [usual prompt here] # 

# it is better to have it displayed not before the prompt line, but on a separate line, so:
PROMPT_COMMAND=' df -h ~ | tail -n 1 | awk '\''{print $(NF-2),$(NF-1), $NF }'\'' '

# will display it before the prompt line, not messing up with bash computation of the prompt-line length
354Mb 68% /root 
[usual prompt here] # 

相关内容