여러 파일을 빠르게 편집하고 싶습니다. 비슷한 방식으로 파일을 쌓을 수 있는 도구가 있으면 pushd
좋을 것 같습니다 popd
. 그런 도구가 존재하나요? 그렇지 않다면 어떤 제안이 있습니까?
이런 식으로 스택에 있는 파일을 나열할 수 있어야 할 것 같습니다.
files -v
0 /etc/bind/named.conf.options
1 /etc/default/bind9
2 /etc/bind/named.conf.local
그런 다음 아래와 같이 편집할 파일을 엽니다.
nano ~2
동시에 여러 파일을 편집할 수 있지만 동일하지는 않다는 것을 알았습니다. 파일이 여러 개 열려 있는 경우 nano ./test.txt /etc/another_test.txt
변경 사항 테스트와 같은 다른 작업을 수행하려면 열려 있는 각 파일을 닫고 저장하여 Nano를 종료해야 합니다. 그렇다고 해서 변경 사항을 테스트하기 위해 파일을 다시 열거나 여러 tty를 열 때 History 명령을 사용하는 것에서 실제로 벗어나지는 않습니다.
답변1
Bash에서는 다음과 같은 것이 도움이 될 수 있습니다.
#!/bin/bash
filelist=()
function fadd() {
filelist+=("${@}")
}
function fdel() {
local -r index="${1}"
newstack=()
for ((i = 0; i < ${#filelist[@]}; ++i)); do
if [[ "${i}" != "${index}" ]]; then
newstack+=( "${filelist[${i}]}" )
fi
done
filelist=( "${newstack[@]}" )
}
function flist() {
for ((i = 0; i < ${#filelist[@]}; ++i)); do
printf "%2d %s\n" "${i}" "${filelist[${i}]}"
done
}
function fedit() {
local -r index="${1:-0}"
${EDITOR} "${filelist[${index}]}"
}
function fget() {
local -r index="${1:-0}"
echo "${filelist[${index}]}"
}
이는 처음에 비어 있는 배열 filelist
과 해당 배열에서 작동하는 함수 세트를 정의합니다.
- 이
fadd()
함수는 배열 끝에 이름을 추가합니다. - 이
fdel()
함수는 인덱스를 기반으로 배열에서 요소를 삭제합니다. - 이
flist()
함수는 배열의 내용과 해당 인덱스를 나열합니다. - 이 함수는 주어진 index 에 해당하는 파일이 포함된
fedit()
편집기( 로 정의됨)를 엽니다 .${EDITOR}
filelist
- 이
fget()
함수는 주어진 인덱스에 있는 파일의 파일 이름을 인쇄합니다.
여기에는 오류 검사가 포함되지 않습니다(예: 잘못된 인덱스를 제공할 수 있음). 또한 파일 이름에 공백을 사용하여 이것을 테스트하지 않았다는 점에 유의하십시오. 이것은 전혀 제대로 작동하지 않을 수 있습니다.
위의 내용이 포함된 파일을 얻으면 다음을 수행할 수 있습니다.
$ source file_mgmt
# Add some files of interest
$ fadd ~/src/foo.[ch]
$ fadd /tmp/bar.txt
$ fadd ~/.bashrc
# View the file list
$ flist
0 /home/user/src/foo.c
1 /home/user/src/foo.h
2 /tmp/bar.txt
3 /home/user/.bashrc
# Open a file from the list by index
$ fedit 0
[ my ${EDITOR} opened with /home/user/src/foo.c ]
# Remove a file from the list
$ fdel 2
$ flist
0 /home/user/src/foo.c
1 /home/user/src/foo.h
2 /home/user/.bashrc
# Copy ~/.bashrc to tmp
$ cp $(fget 2) /tmp
파일 목록은 셸별로 작성됩니다. 예를 들어 여러 터미널이 열려 있는 경우 별도의 파일 목록이 표시됩니다.