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

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

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

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

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

./script_name.sh file_1 file_2 file_3

기능 탭 자동 완성. (이거 참 편해요!)

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


read일부 입력 데이터를 요청하는 한 가지 방법이지만 여러 입력과 긴 텍스트의 경우 번거롭다는 것을 알았습니다.

답변1

좋습니다. 스크립트는 하나의 필수 매개변수와 두 개의 선택적 매개변수를 사용합니다. 하나 이상의 인수를 지정하지 않으면 종료됩니다(오류와 함께). 그 외에는 별로 효과가 없습니다!

#!/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.

다음을 추가하도록 편집되었습니다.

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

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

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

source ./completion_for_script_name.sh

.bash_profile일반적으로 또는 와 같은 셸의 구성 파일에서 이 작업을 수행합니다 .bashrc.

관련 정보