我正在寻找一种方法将 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 ~]也包含在图片中:
[\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