이 작업을 수행하는 방법에 대해 매우 간단한 내용이 누락되었겠지만 간단한 스크립트가 있습니다.
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.tar.xz) tar xvJf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*.xz) unxz $1 ;;
*.exe) cabextract $1 ;;
*) echo "\'$1': unrecognized file compression" ;;
esac
else
echo "\'$1' is not a valid file"
fi
}
스크립트는 작동하지만 로그인할 때 기본적으로 실행할 수 없는 것 같습니다.
나는 이 매우 철저한 답변을 찾았습니다.zsh에서 자신만의 쉘 함수를 정의하고 로드하는 방법, 그리고 함수를 저장하는 해당 디렉터리를 표시하기 위해 $fpath를 가져왔습니다.
내 .zshrc 구성 파일의 맨 아래에 추가한 것이 fpath=( ~/.local/bin "${fpath[@]}" )
내 기능이 있는 경로입니다.
이것을 입력하면 다음과 같은 결과 echo $fpath
가 나타납니다.
/home/me/.local/bin /home/me/.oh-my-zsh/plugins/git /home/me/.oh-my-zsh/functions /home/me/.oh-my-zsh/completions ...
autoload -Uz extract
하지만 로그인할 때마다 명시적으로 입력하지 않으면 작동하지 않습니다.
로그인할 때 전체 디렉토리를 자동으로 로드할 수 있는 방법이 있습니까?
답변1
스크립트와 함수를 혼동하고 있습니다.
스크립트 만들기
스크립트는 독립적인 프로그램입니다. zsh로 작성될 수도 있지만 zsh 명령줄뿐만 아니라 어디에서나 호출할 수 있습니다. zsh 명령줄이나 다른 zsh 스크립트에서 zsh로 작성된 스크립트를 실행하는 경우 이는 우연일 뿐이며 스크립트 동작에 영향을 미치지 않습니다. 스크립트는 자체 프로세스에서 실행되며 상위 프로세스에 영향을 주지 않습니다(예: 변수나 현재 디렉터리를 변경할 수 없습니다).
코드는 어디에서나 호출할 수 있고 실행 중인 셸의 상태에 액세스할 필요가 없는 독립적인 작업을 수행하므로 함수가 아닌 스크립트여야 합니다.
스크립트는 실행 파일이어야 합니다. chmod +x /path/to/script
.it는 다음으로 끝나야 합니다.셰르본 라인커널에 스크립트를 해석하는 데 사용할 프로그램을 알려주십시오. 귀하의 경우 파일 상단에 다음 줄을 추가하십시오.
#!/usr/bin/env zsh
변수에 나열된 디렉토리에 파일을 배치합니다 $PATH
. 많은 시스템이 사용자 기본값으로 설정되어 있으므로 ~/bin
사용할 수 있습니다. 추가 디렉터리를 추가하려면 다음을 참조하세요.~/.local/bin
PATH
http://unix.stackexchange.com/questions/26047/how-to-Correctly-add-a-path-to-path
별명, 함수 또는 내장 명령이 아닌 명령 이름을 입력하면 쉘은 해당 이름의 실행 파일을 찾아서 $PATH
실행합니다. 따라서 스크립트를 쉘에 선언할 필요 없이 올바른 위치에 배치하기만 하면 됩니다.
함수를 만들어 보세요
함수는 기존 셸 인스턴스 내에서 실행되는 코드입니다. 변수, 현재 디렉터리, 함수, 명령 기록 등 모든 쉘 상태에 대한 전체 액세스 권한을 갖습니다. 호환되는 셸에서만 함수를 호출할 수 있습니다.
코드는 함수로 작동하지만 함수로 만들어도 아무 것도 얻을 수 없으며 다른 곳(예: 파일 관리자)에서 코드를 호출하는 기능을 잃게 됩니다.
zsh에서는 함수의 정의 를 ~/.zshrc
. .zshrc
자동 로딩은 두 단계로 이루어집니다.
- 함수 이름을 선언하는 데 사용됩니다
autoload -U myfunction
. myfunction
처음 호출 되면 zsh는myfunction
나열된 디렉토리에서 이름이 지정된 파일을 찾고$fpath
찾은 첫 번째 파일을myfunction
.
모든 기능은 사용하기 전에 정의되어야 합니다. 그렇기 때문에 파일 을 $fpath
.autoload
$fpath
% autoload -U myfunction
% which myfunction
myfunction () {
# undefined
builtin autoload -XU
}
Zsh에는 탐색을 통해 이러한 스텁을 생성하는 메커니즘이 있습니다 $fpath
. 이는 완료 하위 시스템에 포함되어 있습니다.
- 놓다
#autoload
파일의 첫 번째 줄로. - 완성 시스템 초기화 함수를 호출하기 전에
.zshrc
완전히 설정되었는지 확인하세요 .fpath
compinit
함수 정의가 포함된 파일에는 함수가 포함되어야 합니다.몸, 함수의 정의가 아닙니다. zsh는 함수를 호출할 때 파일의 내용을 실행하기 때문입니다. 따라서 코드를 함수에 넣으려면 다음을 포함하는 extract
디렉토리 중 하나에 있는 이라는 파일에 코드를 넣으십시오.$fpath
#autoload
if [ -f $1 ]; then
…
함수가 로드될 때 초기화 코드를 실행하거나 도우미 함수를 정의하려는 경우 이 관용구(zsh 배포판에서 사용됨)를 사용할 수 있습니다. 보조 정의 및 기타 초기화 코드와 함께 함수 정의를 파일에 저장합니다. 마지막으로 함수를 호출하고 매개변수를 전달합니다. 그러면 다음이 myfunction
포함됩니다:
#autoload
my_auxiliary_function () {
…
}
myfunction () {
…
}
myfunction "$@"
폴리스티렌
7z x
대부분의 아카이브 유형에서 작동합니다.
답변2
이 문제를 해결하는 방법에는 여러 가지가 있습니다.
- 이 기능을 .zshrc에 넣을 수 있습니다.
- 스크립트를 얻을 수 있습니다.
- 함수에 대한 코드를 다음과 같은 파일에 직접 배치할 수 있습니다.정제PATH의 디렉터리에 있습니다.