cd ~foo
를 입력하면 bash가 foo
의 전체 디렉토리 경로를 입력하는 바로 가기로 foo
디렉토리로 이동합니다. cp ~foo/bar.txt ~/bar.txt
에서 /foo/
디렉토리에서 홈 디렉토리로 파일을 복사 할 수 있기를 원합니다. 따라서 기본적으로 ~/
,하지만 어디에 디렉토리를 지정해야합니다. [Jfgi를해야한다고 확신하지만 무엇을 해야할지 모르겠습니다.]
내가 사용했던 방법은 바로 가기를 원하는 디렉토리에 대한 심볼릭 링크가 포함 된 디렉토리를 만들고 해당 디렉토리를 CDPATH에 추가하는 것입니다. CDPATH는 디렉토리를 전환 할 때 cd
가 검색 할 위치를 제어하므로, 해당 symlinks 디렉토리가 CDPATH에 있으면 cd
를 symlinked 디렉토리 중 하나로 즉시 옮길 수 있습니다.
mkdir ~/symlinks
ln -s /usr/bin ~/symlinks/b
export CDPATH=~/symlinks
cd b # Switches to /usr/bin
물론 현재 디렉토리에 "b"라는 디렉토리가 있으면 작동하지 않습니다. CDPATH보다 우선합니다.
나는 보통 "먼저 쉘을 전환해야한다"라는 답변을 싫어하지만,이 exact 기능은 ZSH 에 존재합니다. 당신은 그것을 대신 사용하려고합니다. 그것은 명명 된 디렉토리 라고합니다. 변수 foo
를 내보내고 ~foo
를 참조하면 $foo
값으로 해석됩니다. 이는 cd
이외의 명령에서 작동하기 때문에 특히 편리합니다.
echo hi > /tmp/test
export t=/tmp
cat ~t/test # Outputs "hi"
cd
에 대한 래퍼 함수를 작성하고 "cd"라고 부를 수 있습니다 (궁극적으로 함수는 builtin cd
-builtin
키워드 사용). 함수가보기 전에 Bash가 명령 행에서 확장되지 않고 디렉토리 이름의 초기 문자 ( ":")로 표시되지 않는 접두어 문자를 사용할 수 있습니다. 보다 견고하게 만들고 싶지만 간단한 개요는 다음과 같습니다.
# format: [semicolon] shortcut colon destination [semicolon] ...
export CDDATA='foo:/path/to/foo;bar:/path/to/bar;baz:/path/to/baz'
cd () {
local dest=$1
if [[ $dest == :* ]]
then
[[ $CDDATA =~ (^|;)${dest:1}:([^;]*)(;|$) ]]
dest=${BASH_REMATCH[2]}
fi
if [[ -z $dest ]]
then
cd
else
builtin cd "$dest"
fi
}
cd :bar # pwd is now /path/to/bar
bash와 함께 :
~foo
는 사용자 foo의 홈 디렉토리 용으로 예약되어 있습니다. 그 편의를 위해 사용자를 만드는 것은 권장하지 않습니다.
CDPATH
환경 변수를 설정하여 디렉토리 변경 인 경우 인생을 더 쉽게 (또는 더 어렵게) 만들 수 있습니다 (bash(1)
에서 찾아보십시오).
그 외에도, 생각할 수있는 유일한 방법은 축약하려는 디렉토리에 대한 환경 변수를 설정하는 것입니다.
$ FOODIR=/var/lib/misc
$ cp ~/bar.txt $FOODIR
Bash 변수는 북마크 시스템을 만드는 데 사용될 수 있습니다. 변수는 모든 명령에서 작동하며 bash는 변수 이름을 탭으로 완성합니다. 최신 버전의 bash에서 /가 변수 이름에 추가되면 변수에 포함 된 경로도 탭 완성 될 수 있습니다.
mydir=/home/chris/dir
ls $my # Tab completion works on variable name.
ls $mydir/ # Tab completion is equivalent to that with ls /home/chris/dir/
# (doesn't work in older versions of bash).
지속성을 위해 변수 선언은 .bashrc에서 제공하는 파일에 보관할 수 있습니다. 이 파일은 bash 스크립트이므로 aur="${HOME}/AUR"
와 같은 다른 변수를 참조하거나 특정 호스트 if [[ $HOSTNAME == foo ]]; then bar=baz; fi
에서만 실행되는 선언을 포함 할 수 있습니다. 이는 여러 파일에서 구성 파일을 재사용 할 때 유용합니다 호스트와 사용자.
다음 bash 기능 (.bashrc에 추가되거나 그로부터 제공됨)을 통해 책갈피 파일에 책갈피를 추가하고 제거 할 수 있습니다. 상당히 새롭고 버그가 없음을 보증하지 않습니다.
bookmark_file=~/.bookmarks
source "$bookmark_file"
bm() {
usage='Usage:
bm add <name> <path> Create a bookmark for path.
bm add <name> Create a bookmark for the current directory.
bm update Source the bookmark file.
bm remove <name> Remove a bookmark'
case $1 in
add)
local path
if [[ $# -eq 2 ]]; then
path=.
Elif [[ $# -eq 3 ]]; then
if [[ -e $3 ]]; then
path="$3"
else
echo "bm: ${3}: No such file or directory."
return 1
fi
else
echo "$usage"
return 1
fi
if declare | grep "^${2}=" > /dev/null; then
echo "bm: The name $2 is in use."
return 1
fi
path=$(readlink -f "$path")
echo ${2}=\""$path"\" >> "$bookmark_file"
eval ${2}=\""$path"\"
return 0
;;
update)
if [[ $# -eq 1 ]]; then
source "$bookmark_file"
return 0
fi
;;
remove)
if [[ $# -eq 2 ]]; then
unset $2
local contents=$(grep -v "^${2}=" "$bookmark_file")
echo "$contents" > "${bookmark_file}.tmp"
rm -f "$bookmark_file"
mv "${bookmark_file}.tmp" "$bookmark_file"
return 0
fi
;;
esac
echo "$usage"
return 1
}
방법은 ~c
를 원하는 경로로 대체하는 cd의 별명을 작성하는 것입니다. 아니면 그냥 zsh를 사용하십시오;)
디렉토리를 변경하려면 wcd를 사용할 수 있습니다. Wherever Change Directory
그것으로 wcd plugin_root
.
나는 즉시 별칭을 생성하는 아래 기능을 가지고 있습니다.
s () {
if [[ "x$1" != "x" ]]
then
alias $1="cd $PWD;pwd"
echo "alias $1=\"cd $PWD;pwd\""
else
echo "Usage: s[s] <directory bookmark name>"
return 1
fi
}
디렉토리를 북마크하고 싶을 때는 s dirName
만 입력하면됩니다. alias dirName="cd /my/current/directory/;pwd"
와 같은 별칭이 생성됩니다. dirName
를 입력하여이 디렉토리로 돌아올 수 있습니다. bash_aliases에도 저장하는 버전이 있습니다. 이것은 모든 쉘에서 작동합니다.