일반적으로 스크립트에서 파일 이름을 사용할 때 아래와 같이 스크립트에서 파일 이름을 명시적으로 언급합니다.
#!/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
.