COMMAND 활동에 대한 최소 요구사항은 두 개의 필드-ACTION 및EXEC_STRING입니다.
ACTION action_name { EXEC_STRING execution_string }
실행 문자열은 COMMAND 활동 정의에서 가장 중요한 부분입니다. 실행 문자열은 터미널 윈도우에서 실행되는 명령행과 유사한 구문을 사용하지만 이외에도 파일과 문자열 인수를 취급하기 위한 구문이 더 있습니다.
실행 문자열은 다음과 같이 구성할 수 있습니다.
파일 및 비파일 인수
쉘 구문
실행 파일의 절대 경로 또는 이름
인수는 명령어 또는 응용 프로그램을 제대로 실행하는데 필요한 정보입니다. 예를 들어, 문서 편집기에서 파일을 열기 위해 사용하는 다음과 같은 명령행을 생각해 봅시다.
dtpad filename
이 명령어에서 filename은 dtpad 명령어의 파일 인수입니다.
활동은 응용 프로그램이나 명령어와 마찬가지로 인수를 가질 수 있습니다. COMMAND 활동이 사용할 수 있는 데이터 유형은 다음과 같습니다.
파일
문자열 데이터
실행 문자열은 쉘을 통하기보다는 직접 실행됩니다. 그러나 실행 문자열에서 명시적으로 쉘을 호출할 수 있습니다.
예를 들어,
EXEC_STRING \ /bin/sh -c \ 'tar -tvf% (File)Arg_1% 2>&1 | \${PAGER:-more;\ echo "\\n*** 윈도우에서 닫기를 선택하여 닫으십시오 ***"'
응용 프로그램이 PATH 변수에 나열된 디렉토리에 있는 경우, 간단한 실행 파일 이름을 사용할 수 있습니다. 응용 프로그램이 다른 곳에 있으면, 실행 파일의 절대 경로를 사용해야 합니다.
명령행에서 응용 프로그램을 시작할 때 사용한 구문과 동일한 구문을 EXEC_STRING에 대해 사용하십시오.
이 실행 문자열은 클라이언트 xclock을 디지털 시계로 시작합니다. 명령행은 명령행 옵션을 포함하지만 인수는 필요하지 않습니다.
EXEC_STRING xclock -digital
파일 인수에 다음 구문을 사용하십시오.
%Arg_n%
또는
%(파일)Arg_n%
(파일)은 Arg_n에 제공된 인수가 (기본적으로) 파일이라고 가정하기 때문에 선택적입니다. (%(문자열)Arg_n% 구문의 사용에 대해서는 191 페이지의 "파일 인수를 문자열로 해석하기"를 참조하십시오.)
이 구문을 사용하면 사용자는 데이터 파일 객체를 활동 아이콘에 놓고 해당 파일 인수와 함께 활동을 시작할 수 있습니다. 이 구문은 n번째 인수를 명령행으로 대체합니다. 파일은 지역 파일 또는 원격 파일일 수 있습니다.
이 예는 디렉토리 인수로만 작동하는 활동에 대한 정의 부분을 나타내고 있습니다.디렉토리를 활동 아이콘에 놓으면, 활동은 읽기 쓰기 권한이 있는 디렉토리의 모든 파일 목록을 표시합니다.
ACTION List_Writable_Files { ARG_TYPE FOLDER EXEC_STRING /bin/sh -c 's -l %Arg_1% | grep rw-' ... }
파일 인수에 다음의 구문을 사용하십시오.
%(File)"prompt"%
이 구문은 사용자가 활동 아이콘을 두 번 눌렀을 때 파일 이름에 대한 프롬프트를 표시하는 활동을 작성합니다.
예를 들어, 다음과 같은 실행 문자열은 wc -w 명령어의 파일 인수에 대한 프롬프트를 표시하는 대화 상자를 표시합니다.
EXEC_STRING wc -w %(File)"Count words in file:"%
파일 인수에 다음의 구문을 사용하십시오.
%Arg_n"prompt"%
또는
%(File)Arg_n"prompt"%
이 구문은 다음과 같은 작업을 수행하는 활동을 작성합니다.
놓은 파일을 파일 인수로 허용합니다.
사용자가 활동 아이콘을 두 번 눌렀을 때 파일 이름에 대한 프롬프트를 표시하는 대화 상자를 표시합니다.
예를 들어, 다음 실행 문자열은 놓은 파일에 대해 lp-oraw를 수행합니다. 아이콘을 두 번 눌러 활동이 시작되면, 파일 이름에 대해 프롬프트를 표시하는 대화 상자가 나타납니다.
EXEC_STRING lp -oraw%Arg _1"File to print:"%
비파일 매개변수에 다음 구문을 사용하십시오.
%"prompt"%
또는
%(문자열)"prompt"%
(문자열)은 인용된 텍스트가 기본적으로 문자열 데이터로 해석되기 때문에 선택적입니다. 이 구문은 비파일 데이터에 대한 프롬프트를 표시하는 대화 상자를 표시합니다. 파일 이름에 대한 프롬프트를 표시할 때는 이 구문을 사용하지 마십시오.
예를 들어, 다음 실행 문자열은 xwd 명령어를 실행하고 각 픽셀에 추가될 값에 대한 프롬프트를 표시합니다.
EXEC_STRING xwd -add %"Add value:"% -out %Arg_1"Filename:"%
인수에 다음 구문을 사용하십시오.
%(문자열)Arg_n%
예를 들어, 이 실행 문자열은 lp -tbanner filename 명령어를 사용하여 파일 이름이 포함된 표제와 함께 파일을 인쇄합니다.
EXEC_STRING lp -t%(String)Arg_1%% (File)Arg_1"File to print:"%
실행 문자열에 쉘을 지정하십시오.
/bin/sh -c 'command ' /bin/ksh -c 'command ' /bin/csh -c 'command'
다음 문자열은 쉘 처리를 요구하고 파일 인수를 허용하는 더 복잡한 실행 문자열입니다.
EXEC_STRING /bin/sh -c 'tbl %Arg_1"Man Page:"% | troff -man'
다음 실행 문자열은 압축된 파일을 인수로 사용하도록 요구합니다. 활동은 파일의 압축을 풀고 lp-oraw를 사용하여 파일을 인쇄합니다.
EXEC_STRING /bin/sh -c 'cat %Arg_1 "File to print:"% | \ uncompress | lp -oraw'
활동에서 복수 파일 인수를 처리하는 방식은 세 가지가 있습니다.
활동을 각 인수에 한 번씩 반복하여 실행할 수 있습니다. EXEC_STRING이 단일 파일 인수를 포함하고, 활동 아이콘에 복수 파일을 놓음으로써 복수 파일 인수를 제공하는 경우, 활동은 각 파일 인수에 대해 별도로 실행됩니다.
예를 들어, 복수 파일 인수가 다음 활동 정의에 제공되는 경우,
ACTION DisplayScreenImage { EXEC_STRING xwud -in %Arg_1% ... }
DisplayScreenImage 활동이 반복하여 실행됩니다.
활동은 두 개 이상의 교환할 수 없는 파일 인수를 사용할 수 있습니다. 예를 들어,
xsetroot -cursor cursorfile maskfile
은 특정 순서로 두 개의 서로 다른 파일을 필요로 합니다.
활동은 각 파일 인수에 대해 동일한 명령어를 순차적으로 수행할 수 있습니다. 예를 들어,
pr file [file ...]
은 하나 또는 여러 개의 파일을 한 인쇄 작업에서 인쇄합니다.
다음과 같은 구문 규약 중 하나를 사용하십시오.
파일 이름에 대한 프롬프트를 표시하는 활동을 원하는 경우에는 각 파일 인수에 다음 구문을 사용하십시오.
%(파일) "prompt"%
각 인수에 서로 다른 prompt 문자열을 사용하십시오.
예를 들어, 이 실행 문자열은 두 파일에 대한 프롬프트를 표시합니다.
EXEC_STRING xsetroot -cursor %(File)"Cursor bitmap:"% \ %(File)"Mask bitmap:"%
다음 구문 규약 중 하나를 사용하십시오.
놓은 파일을 여러 개 허용하거나 두 번 눌렀을 때 단일 파일에 대한 프롬프트를 표시하려면 파일 인수에 다음 구문을 사용하십시오.
% Arg_1"prompt"% %Args%
활동은 command file 1 file 2...의 형태로 명령어를 발행하게 됩니다.
다음 실행 문자열은 활동을 두 번 눌렀을 때(파일 인수가 없음) 프롬프트를 표시하는 것을 제외하고 앞의 예와 유사한 활동을 작성합니다.
EXEC_STRING pr %Arg_1"File(s) to print:"% %Args%
복수의 놓은 파일 인수를 허용하고 다음 형태로 명령행을 실행하려면,
commandfile 1 file2 ...
다음 구문을 사용하십시오.
%Args%
다음 실행 문자열은 복수 파일에 대해 이름이 Checkout인 스크립트를 실행합니다.
EXEC_STRING /usr/local/bin/Checkout \ %Arg_1"Check out what file?"%%Args%