디렉터리의 모든 nano 파일을 나열하는 스크립트를 만들고 있습니다. han은 파일에 숫자를 추가합니다. (각 파일마다 +1이 추가됨) 그러면 사용자는 nano 파일을 볼 수 있습니다.
이것이 내가 지금까지 가지고 있는 것입니다. 내가 지적하고 싶은 것은 모든 파일 이름이 로 끝난다는 것입니다. _log
이것이 바로 grep이 이와 같이 작동하기를 원하는 이유입니다.
path=~/home/folder/list
list=$(`ls $path | grep -i \*_log`)
printf '%s\n' "${list[@]}" | nl -v 1
read -p "Number of file to be displayed:" numb
sudo cat $path/${list [numb]}
답변1
내가 올바르게 이해했다면 모든 파일을 포함하는 배열을 만든 다음 사용자가 입력한 번호에 해당하는 파일 내용을 표시하려고 합니다. 그렇다면 필요 이상으로 일을 더 복잡하게 만드는 것입니다. 이것으로 충분합니다:
## Get the files into the array $list
list=(/home/folder/list/*_log)
## Display the file names
for i in ${!list[@]}; do
printf "%s: %s\n" $i "${list[i]}";
done
## Get the user input
read -p "Number of file to be displayed:" numb
## display the file (don't use sudo unless absolutely necessary)
cat "${list[numb]}"
전체 경로를 포함한 파일 이름이 표시됩니다. 이름만 표시하려면 for
루프를 다음과 같이 변경하세요.
## Display the file names
for i in ${!list[@]}; do
printf "%s: %s\n" $i "${list[i]##*/}"
done