화면에 표시하려는 일부 텍스트가 포함된 파일이 디스크에 있습니다. 다음을 수행할 수 있습니다.
dialog --yesno "`cat FILE`" 10 100
FILE
다만, 크기가 커지면 쉘의 명령 길이 제한을 초과할 가능성이 있어 걱정됩니다 . 이 작업을 수행하는 다른 방법이 있습니까?
사용자가 스크롤할 수 있도록 파일의 내용을 표시하고 싶습니다.진짜긴) 다음에 수행할 작업을 선택합니다. ("예" 및 "아니오" 버튼의 레이블을 좀 더 의미 있는 것으로 변경했습니다.) 아마도 이와 같이 명령줄을 통해 6페이지의 텍스트를 전송하려는 시도는 실패할 것입니다.
답변1
dialog
이 매뉴얼 페이지를 보면 텍스트를 매개변수로 전달하는 것을 피할 수 있는 방법은 없는 것 같습니다. 데이터를 파이프로 연결하거나 파일에서 직접 읽는 방법은 없는 것 같습니다 . 그러나 매개변수 크기 제한을 사용할 수 있습니다 head
. 대부분의 Linux 시스템에서 단일 매개변수의 최대 크기는 32KiB이므로 다음을 수행할 수 있습니다.
dialog --max-input 32768 --yesno "$(head -c 32K FILE)" 10 100
단일 매개변수의 최대 크기가 정의되어 있으며 설치된 경우 커널 헤더 MAX_ARG_STRLEN
에서 찾을 수 있습니다 . /usr/include/linux/binfmts.h
일반적으로 이 값 은 1KiB PAGE_SIZE * 32
입니다 (참조 ).PAGE_SIZE
/usr/include/linux/a.out.h
물론 이러한 값은 완전히 재구성될 수 있습니다. 또한 이는 MAX_ARG_STRLEN
Linux 전용이며 Linux 2.6.23에 도입되었습니다. 실제 제한 사항에 대한 자세한 내용은 다음을 참조하세요.명령의 단일 매개변수의 최대 크기를 정의하는 것은 무엇입니까?.
고쳐 쓰다
도대체 이 --file
주장을 실제로 사용할 수 있습니다. (테스트되지 않음) 다음과 같은 작업을 수행할 수 있는 것 같습니다.
{
echo -n \"
sed 's/"/\"/' FILE
echo -n \"
} | dialog --yesno --file '&1' 10 100
sed
파일에 따옴표가 없다는 것을 알고 있다면 따옴표가 필요하지 않습니다. 또는 필요한 모든 내용(인용문 등)을 파일에 넣고 --yesno
다음을 수행하세요.
dialog --file FILE