bash에서 명령을 정의 할 수 있습니까?


25

예를 들어 다음을 설정할 수 있습니다.

gb = cd /media/Dan/evolution

... gbbash에서 실행할 때마다 cd특정 디렉토리로 갈 수 있습니까?

온라인에서 무언가를 찾았습니다 : alias명령. 그러나 위의 작업을 수행 할 수없는 것 같습니다.

그것을 할 수 있습니까? 방법?


10
alias gb='cd /media/Dan/evolution'
Nykakin

4
@ 젠, 문제가 해결되면 답변을 수락하십시오. 이 문제를 해결하는 데 도움을 주신 사용자에게 감사의 말을 전하는 제스처입니다. :)
Ramesh

2
참고 : 이것은 bash에 관한 것입니다 : Linux는 커널입니다. Linux는 종종 전체 운영 체제를 나타내는 데 잘못 사용됩니다. 혼란 스러울 수 있습니다. 예를 들어“Linux에서 그런 작업을 할 수 있습니까?”라는 질문은 컴퓨터에서 할 수 있다면 가능합니다. Linux 커널을 사용하여 원하는 운영 체제를 구현할 수 있기 때문입니다. 따라서 우리는 Ubuntu Gnu + Linux + 아마도 X11을 사용하고 있어야합니다 (데스크탑에있는 경우, 즉 디스플레이가없는 서버가 아닌 경우).
ctrl-alt-delor

@richard 좋은 지적이지만 기술적으로는 이것이 posix불만 일뿐 bash입니다.

1
@richard 사실, 그게 문제입니다. 사람들이 안드로이드와 같은 맛을 의미하지 않기 때문에 작동합니다. 나는 그것이 좋은 것이라고 말하지는 않지만 그것이 무엇인지입니다. 내가 당신의 리눅스 진술에 대해 언급 한 이래로 내 추천은 암시 적이었습니다. 주제가 혼란스러운 용어이기 때문에 나는 나 자신을 분명히하고 있었다. (나는 당신의 마지막 코멘트를 잘못 이해했을 수도 있습니다)
keyser

답변:


50

그냥 입력하십시오 :

alias gb='cd /media/Dan/evolution'

이 설정을 영구적으로 만들려면 (다른 콘솔을 다시 시작하거나 연 후에 고정되도록) ~ / .bashrc 파일에이 줄을 추가하십시오 (bash를 기본 쉘로 사용한다고 가정)


더 좋게 만들기 위해 ~ / .bash_aliases와 같은 별칭에 대한 전용 별칭 파일을 만들고 ~ / .bashrc 파일 내에서 다음과 같이 호출 할 수 있습니다. [-e ~ / .bash_aliases] &&. ~ / .bash_aliases이 방법으로 ~ / .bashrc 파일을 다른 것들과 "폴링"하지 않습니다.
GeertVc

39

앨리어싱의 대안

gb() { cd /media/Dan/evolution; }

이것은 쉘 함수 gb를 정의하는데, 인수를 취하지 않고 cd / media / Dan / evolution을 수행합니다. 다른 제안과 마찬가지로 ~ / .bashrc에 추가 할 수 있습니다


alias 명령이 정의 된 별명을 표시한다는 단점이 있으므로, 그러한 기능을 정의하는 afaik은 "예기치 않은 동작"을 초래할 수 있습니다. 나는 완성을 위해 너에게 투표 할 것이다 :)
vfbsilva

7
실제로는 아닙니다. 당신은 그냥 입력 : 선언 -f gb 그것이 무엇을 볼 수
Paul Calabro

11
또한이 옵션을 사용하면 함수 정의 내에 사용자 지정 논리 를 추가하여 인수를 받아들이고 필요한 모든 작업을 수행 할 수 있습니다. 별칭은 인수를 전달하고 미리 정의 된 작업 만 수행 할 수 있습니다 .
Paul Calabro

5
@PaulCalabro 더 나은 type gb것은 그것이 별명 이거나 함수 라면 효과적 입니다.
Sparhawk

POSIXLY는 : { echo 'true() { : ; }' >./script ; . ./script ; command -V true ; command -V /usr/bin/true ; }- true is a shell function\n/usr/bin/true is /usr/bin/true- \n문자가 출력 문자 줄 바꿈했다.
mikeserv

11

가능하며 alias원하는 명령입니다. 예를 들어 alias ll="ls -l"bash에서는 ll대신 대신 입력 할 수 있습니다 ls -l. 별칭을 설정할 때 사용 된 공백이 없습니다.man alias유용 할 수 있습니다.


-3

또는 원하는 명령을 호출하는 C 프로그램을 작성하여 / usr / bin에 저장할 수 있습니다.

#include <stdio.h>
#include <string.h>

int main () {
    char command[50]; //notice you can change this to fit your needs
    int return_val;

    strcpy( command, "echo \"cd /media/Dan/evolution\" | bash -i" );
    return_val = system(command); 

   //this is equivalent to entering the command in a new bash, 
   //which will return and exit

    return return_val;
}

컴파일하려면 소스가 저장된 디렉토리 (bash에서)로 이동하여 실행하십시오 (sudo가 필요할 수 있음).

 gcc ./gb.c -o /usr/bin/gb

여기 에서 추가 연구를 한 후 , 나는 단순히 당신의 명령을 던지는 것을 깨달았습니다.system() 내장 된 bash가 작동하지 않는다는 . 그렇기 때문에 대화식 bash 인스턴스를 작성하고 명령을 에코해야합니다. 당신이,의 말을하자 쉘 스크립트 (로 전화 단축하고자하지 않는 한, 그냥 지나치게 복잡하고 아마 쓸모 some_script대신을 sh ~/radgeRayden/Scripts/some_script).

system () 함수에 대한 참조


2
실제로 이것을 시도 했습니까? 작동하지 않습니다.
Dennis

1
같은 이유로 sh -c "cd /media/Dan/evolution"작동하지 않습니다. 힌트 : 서브 쉘
디지털 외상

5
cd/ subshell 문제를 제외하고 쉘 프로그램에 쉘 명령을 쉽게 (또는 더 쉽게) 넣을 수있을 때 c 프로그램에서 쉘 명령을 래핑 할 때의 이점은 무엇입니까?
디지털 외상

1
이것에 대한 전문가는 아니지만 / usr / local / bin에 이와 같은 (더욱 유용한 것)을 넣지 말아야합니까?
Joe

2
이 COULD가 작동하더라도 한 사용자에 따라 / usr / local / bin으로 들어가면 안됩니다.
Johan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.