별칭을 만들고 ff
에서 소스를 가져왔습니다 ~/.zsh/aliases.zsh
.
별칭 자체는 잘 작동합니다.
alias ff
ff='firefox --safe-mode'
예상대로 작동합니다.
그러나 아래에서 실행하려고 하면 다음과 같은 결과 gdb
가 나타납니다.
> gdb ff
GNU gdb (Debian 7.12-6+b1) 7.12.0.20161007-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
...
For help, type "help".
Type "apropos word" to search for commands related to "word"...
ff: No such file or directory.
(gdb) quit
사용해 보았지만 gdb firefox --safe-mode
실행되지 않습니다.
누구든지 문제가 무엇인지 알아낼 수 있습니까?
답변1
별칭은 쉘의 기능입니다. 별칭을 정의하면 새로운 쉘 명령 이름이 생성됩니다. 이는 쉘에서만 인식되며, 명령 이름으로 나타나는 경우에만 인식됩니다.
예를 들어 다음을 입력하면
> ff
쉘 프롬프트에서 별칭을 호출하지만 다음을 입력하면
> echo ff
이는 ff
명령이 아닌 매개변수일 뿐입니다. (적어도 bash에서는 별칭 정의가 공백으로 끝나는 경우 몇 가지 트릭을 사용할 수 있습니다.Stefan Chazeras의 답변셸 별칭을 사용하기로 결정한 경우 가능한 해결 방법을 참조하세요. )
당신은 입력
> gdb ff
따라서 쉘은 문자열을 인수로 전달하여 gdb
호출 됩니다.ff
명령줄을 통해 디버깅 중인 프로그램에 인수를 전달할 수 있지만 gdb
이 옵션을 사용해야 합니다 --args
. 예를 들어:
> gdb firefox --safe-mode
인수를 사용하여 명령을 실행 하려면 수동 --safe-mode
으로 gdb
수행할 수 있습니다.
> gdb firefox
...
(gdb) run --safe-mode
또는 다음과 같이트리거의 답변다음을 사용할 수 있음을 상기시켜주세요 --args
.
> gdb --args firefox --safe-mode
...
(gdb) run
(다음 첫 번째 인수 --args
는 명령 이름입니다. 나머지 인수는 모두 호출된 명령에 전달됩니다.)
셸 별칭에서 매개변수를 추출하는 것이 가능하지만 별도의 별칭을 정의하는 것이 좋습니다.
alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'
또는 더 다양한 기능을 제공하는 쉘 기능을 사용하는 것이 더 좋습니다. Bash 매뉴얼은 다음과 같이 말합니다:
거의 모든 목적에서 셸 함수는 별칭보다 우수합니다.
답변2
직접적으로는 아니지만 ZSH 셸 별칭을 gdb
.
alias testtest='echo test test test'
function gdb-alias() {
local cmdargs
cmdargs=( ${(z)${aliases[$1]}} )
gdb -q --args $cmdargs
}
이는 ZSH처럼 별칭을 분할한 다음(보다 강력한 코드에서는 첫 번째 인수가 실제로 별칭인지 또는 설정인지 등을 확인합니다) gdb
편의 플래그를 통해 --args
해당 인수를 제공합니다 (참고자료 참조 info gdb invocation
). 그런 다음 실행하면gdb-alias testtest
% gdb-alias testtest
Reading symbols from echo...(no debugging symbols found)...done.
(gdb) r
Starting program: /Users/jhqdoe/usr/Darwin15.6.0-x86_64/bin/echo test test test
test test test
[Inferior 1 (process 93721) exited normally]
(gdb)
이는 echo
(내 어셈블리 구현echo
, 무슨 일이 있어도) gdb
별칭의 매개 변수를 통해 실행됩니다.
(이것은 전역 별칭이나 쉘 메타 문자 foo가 있는 별칭에서 깨질 수 있습니다. gdb가 ZSH에 설정된 것과 호환되는 쉘을 통해 이러한 인수를 던지는지 여부에 따라 달라질 수 있지만 간단한 x='y z'
유형의 경우에는 문제가 없습니다.)
답변3
POSIX 셸에서 별칭은 명령 위치(명령이 필요한 곳)에서만 확장되거나 공백 문자로 끝나는 별칭( zsh
다른 많은 구현에서는 공백이나 탭만)을 확장한 후에만 확장됩니다. 디버깅 중인 프로그램에 매개변수를 전달할 수 있는 옵션도 필요합니다 --args
. gdb
그래서 당신은 이것을 할 수 있습니다 :
alias gdba='gdb --args ' # note the trailing space which does mean
# that aliases are to be expanded after it
alias ff='firefox --safe-mode'
gdba ff
¹ zsh도 지원글로벌별칭( 포함 )은 더 많은 곳으로 확장되지만 . 이외의 항목을 출력 하고 싶지 않기 때문에 여기서는 그러한 별칭을 사용하고 alias -g
싶지 않을 것입니다 .firefox --safe-mode
echo ff
ff
답변4
허용되는 매개변수를 가져오려면 별칭이 필요하지 않습니다 gdb
.
귀하의 경우에는 다음과 같습니다:
gdb firefox
(gdb) set args --safe-mode