자동 완성 기능을 사용하여 파일 이름을 스크립트에 전달

자동 완성 기능을 사용하여 파일 이름을 스크립트에 전달

일반적으로 스크립트 내에서 파일 이름을 사용할 때 스크립트 내에서 명시적으로 파일 이름을 언급합니다. 예를 들면 아래와 같습니다.

#!/bin/bash ... echo "<dynamic text>" >> process_log.log ...

다음과 같이 파일 이름을 스크립트에 전달할 수 있는지 궁금합니다.

./script_name.sh file_1 file_2 file_3

탭 자동 완성 기능이 있습니다. (이렇게 하면 정말 편할 것 같아요!)

누구든지 이것에 대한 경험이 있습니까? 감사합니다.


read일부 입력 데이터를 요청하는 한 가지 방법이지만 여러 입력과 긴 텍스트의 경우 번거롭다고 생각합니다.

답변1

좋습니다. 이 스크립트는 필수 인수 1개와 선택적 인수 2개를 사용합니다. 하나 이상의 인수를 지정하지 않으면 오류와 함께 종료됩니다. 그 외에는 별로 하는 게 없어요!

#!/bin/sh
if [ -z "$1" ]
then
    echo "Missing filename: 1"
    exit 1
else
    file1=$1
fi
file2="$2"
file3="$3"
printf "File 1: %s\n" "$file1"
printf "File 2: %s\n" "$file2"
printf "File 3: %s\n" "$file3"
cat "$file1"

예를 들어 다른 이름으로 저장 script_name.sh하고 실행 파일로 설정합니다.

chmod u+x script_name.sh

그런 다음 다음과 같이 실행하십시오.

./script_name.sh script_name.sh script_name.sh script_name.sh

전달한 세 가지 인수(모두 "script_name.sh")와 그 cat자체가 표시되어야 합니다.

이것을 시도했을 때 탭 완성 기능을 실험했습니다. 자동으로 잘 작동했습니다(누르면 파일과 디렉터리가 표시됨 Tab). 나는 이 일을 하기 위해 아무것도 하지 않았습니다. 그러나 스크립트가 특정 파일에서만 작동하도록 하려면 를 complete -f -X '!*.png' script_name.sh누를 때 ".png" 파일만 표시됩니다 Tab.

추가하려면 편집하세요:

completescript_name.sh위의 예에서는 스크립트 자체에서 실행되지 않습니다 . 별도의 파일( completion_for_script_name.sh예: )을 만듭니다.

complete -f -X '!*.png' script_name.sh

source완성을 현재 환경에 로드하는 데 사용합니다 .

source ./completion_for_script_name.sh

일반적으로 쉘 프로필(예: .bash_profile또는 ) 에서 이 작업을 수행합니다 .bashrc.

관련 정보