항상 한 디렉토리 위로 이동 c d..
하거나 입력하세요.c d ..
내 .bash_profile에 아래 함수를 넣으면 전체 매개변수 세트( )가 아니라 공백 앞의 첫 번째 문자인 "c"만 해석됩니다 c d..
. 이 문자는 2개만 있어야 한다고 생각합니다. 오류 발생
bash: c: - command not found
배쉬 4.2.46에서.
명령줄에서 공백을 사용하여 매개변수를 해석하면 나중에 더 많이 사용될 수 있으므로 이 문제를 해결하고 싶었습니다.
기능:
changedir() {
if [[ $@ = "c d.." ]]; then
command cd ..
else
if [[ $@ = "c d.." ]]; then
command cd ..
fi
fi
}
또한 공백을 포함하여 전체 인수 문자열을 사용하는 것이 더 좋습니다: $*
또는 $@
?
답변1
글쎄요, 함수 이름은 changedir
쉘이 명령을 받을 때만 실행되도록 지정되었습니다 changedir [whatever]
. 명령이 실행될 때마다 실행되지는 않습니다. 입력한 각 명령줄에 대해 함수를 실행하기 위해 트랩을 남용할 수 있지만 DEBUG
여기서는 그렇게 할 필요가 없습니다.
대신 인수 또는 및 인수가 주어졌을 때 실행되는 c
함수 를 생성하세요 .cd ..
d..
d
..
c() {
if [[ $1 = 'd..' ]] ||
[[ $1 = 'd' && $2 = '..' ]]; then
command cd -- ..
else
echo "Invalid arguments to 'c'! Only 'c d..' and 'c d ..' are supported." >&2
fi
}
또는 Bash에서 사용할 수 있습니다 shopt -s autocd
. 이렇게 하면 디렉토리 이름만 지정하면 쉘이 해당 디렉토리로 이동하게 됩니다. 따라서 foobar
동일한 작업이 수행되고 cd foobar
(명령어가 없는 경우 foobar
) ..
디렉터리만 입력됩니다.