시도해 보지만 스크립트에서 sshpass를 사용하여 CUPS lpstat
및 명령을 원격으로 실행할 수 없습니다. lp
나예CUPS를 실행하는 서버에서 대화형 터미널을 사용할 때 이러한 명령과 관련된 모든 줄을 실행할 수 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.
입력하다:
./cups_print_job.sh printer ./file.pdf 1
cup_print_job.sh:
#!/bin/bash
#about
#script to print a file using CUPS via the command line. more options at https://www.cups.org/doc/options.html
#directions
#following the script name, arg1 = ~/.ssh/config host running CUPS; arg2 = path to file; arg3 = page range (e.g. 1-4,7,9-12)
#definitions
server=$1
path=$2
filename=$(basename $path)
range="page-ranges=$3"
#file transfer and printing
read -s -p "Password for CUPS: " password
sshpass -p $password scp $path $server:/tmp
sshpass -p $password ssh -o StrictHostKeyChecking=no $server /bin/bash << EOF
#definitions
printer_name=$(/usr/bin/lpstat -p -d | head -n1 | awk -F ' ' '{print $2}')
options="-o fit-to-page -o media=Letter -o $range"
#print job and cleanup
/usr/bin/lp -d $printer_name $options /tmp/$filename
echo $password | sudo -S rm -r /tmp/$filename
EOF
echo
echo 'Print job sent'
echo
산출:
Password for CUPS: ./cups_print_job.sh: line 20: /usr/bin/lpstat: No such file or directory
/usr/bin/lp: No such file or directory
[sudo] password for print:
Print job sent
~/.ssh.conf 내용:
Host printer
User print
Hostname 192.168.0.16
Port 22
답변1
올바른 방향을 알려준 @UlrichSchwarz에게 감사드립니다. 뒤쪽에공부하다EOF
heredoc 본문이 따옴표 없이 시작되면 로컬로 처리되고 따옴표를 추가하면 스크립트가 예상대로 실행됩니다 .
옳은:
sshpass -p $password ssh -o StrictHostKeyChecking=no $server /bin/bash << "EOF"