명령 및 해당 출력 외에도 bash 프롬프트 및 명령을 출력에 인쇄합니다.

명령 및 해당 출력 외에도 bash 프롬프트 및 명령을 출력에 인쇄합니다.

공부하는 동안 문서화 목적으로 bash 프롬프트, 명령 및 해당 출력(아래 표시)을 이미지로 인쇄하는 방법을 찾고 있습니다. 이 작업을 수행하기 위한 빠른 명령을 작성했지만 대신 bash 프롬프트를 자동으로 인쇄해야 합니다. 사용자 또는 경로가 변경될 때 명령의 일부입니다 [$USER@`hostname` ~]#. 홈 디렉토리의 물결표와 #/$는 사용자가 루트인지 아닌지에 따라 달라지므로 변경해야 할 것은 cmd="ls -l";$를 사용하고 싶지 않다는 것입니다. 필요한 정확한 bash 프롬프트 대신 전체 경로를 얻었기 때문에 PWD:

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

관련 정보