除了命令及其输出之外,还将 bash 提示符和命令打印到输出中

除了命令及其输出之外,还将 bash 提示符和命令打印到输出中

我正在寻找一种方法将 bash 提示符、命令及其输出(如下所示)打印到图像中以供学习时用于文档目的,我编写了一个快速命令来执行此操作,但我需要自动打印 bash 提示符而不是我当用户或路径更改时更改命令的这一部分[$USER@`hostname` ~]#,不要忘记主目录的波浪号和 #/$ 取决于用户是否是 root,所以我需要更改的是cmd="ls -l";,我也不想使用$PWD 因为我得到了完整的路径,而不是我需要精确的 bash 提示:

cmd="ls -l"; convert -font DejaVu-Sans-Mono-Book -pointsize 16 label:"$(echo "[$USER@`hostname` ~]# $cmd\n";$cmd)" /home/myuser/Desktop/result.png

上面的结果在这张图片中,注意[root@centos7 ~]也包含在图片中:

在此输入图像描述

我尝试了变量 $PS1 从此回答和这个回答,但我得到:

[\u@\h \W]\$

谢谢

答案1

我最终写了一个脚本,因为网上似乎没有解决方案:

#!/bin/bash

CMD=$1
#DIR=$(readlink -ve "/proc/$PPID/cwd")
DIR=`pwd`
PRIVILEGE='$'

#echo $DIR
[ $# -eq 0 -o $# -gt 1 ] && { echo -e "Usage:\n\t $0 command\n\t Command should be enclosed in quotations"; exit 1; }
if [ $UID -ne 0 ]; then echo "Please run this script with sudo:"; echo "sudo $0 $*"; exit 1; fi

mkdir -p /result

#echo $DIR
PATTERN="^\/home\/\w+$"
if [[ $DIR =~ $PATTERN || $DIR == '/root' ]]; then DIR='~'; else DIR=`basename $PWD`; fi
echo $DIR

if [ $UID -eq 0 ]; then PRIVILEGE='#'; fi
#echo $PRIVILEGE

NUM=`ls -vr /result/ | head -1 | sed -e 's/\..*$//'`
if [ ! -n "$NUM" ]; then NUM=1; else ((NUM++)); fi

convert -font DejaVu-Sans-Mono-Book -pointsize 16 label:"$(echo "[`id -u -n`@`hostname` $DIR]$PRIVILEGE $CMD";$CMD)" /result/$NUM.png
echo $NUM.png

相关内容