Bash

除了命令及其輸出之外,還將 bash 提示符和命令列印到輸出中

  • August 2, 2019

我正在尋找一種將 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]\$

謝謝

我最終寫了一個腳本,因為網上似乎沒有解決方案:

#!/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

引用自:https://unix.stackexchange.com/questions/533341