입력 할 때 cd ~foo
bash foo
는 전체 디렉토리 경로를 입력하는 바로 가기 로 일부 디렉토리 로 이동 하고 싶습니다 foo
. 디렉토리에서 홈 디렉토리로 cp ~foo/bar.txt ~/bar.txt
파일을 복사 하고 싶습니다 /foo/
... 기본적으로 정확히 작동하는 것을 원 ~/
하지만 디렉토리의 위치를 지정합니다. [Jfgi를해야한다고 확신하지만 무엇을 해야할지 모르겠다]
입력 할 때 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보다 우선합니다.
나는 보통 "먼저 셸을 전환해야한다"라는 답변을 싫어하지만 , ZSH 에는 정확한 기능이 있습니다 . 이를 named directory 라고 합니다. 변수를 내 보내면 참조 할 때 값이 결정 됩니다. 이것은 다음과 같은 명령에서 작동하기 때문에 특히 편리합니다 .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
}
나는 즉시 별칭을 생성하는 아래 기능을 가지고 있습니다.
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에도 저장하는 버전이 있습니다. 이것은 모든 쉘에서 작동합니다.