bash 스크립트의 별명 작성


10

그래서 나는 실험을 시도하고 aliasin을 만들었습니다 .bashrc. 그러나 명령을 테스트하면 다음과 같은 결과가 나타납니다.

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

.bashrc파일에 내가 가진 것은 다음과 같습니다 .

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

재미있는 것은 별명을 만들었을 때 vi효과적이었습니다. 그러나 메뉴는 그렇지 않습니다. UnixStackExchange에서 이전 게시물을 조회하고 다른 게시물을 따르려고 시도했지만 아무 소용이 없습니다. 다른 사람이 제안이 있습니까?


1
alias menu = 'bash ./menuScript.sh'시도 했습니까? (저는 리눅스 머신이 아니므로 테스트 할 수 없습니다)
Con7e

어디에서 '메뉴'를 운영하고 있습니까? 'menuScript.sh'와 동일한 디렉토리가 아닌 경우 '명령을 찾을 수 없음'에 대해 불평합니다. 아마도 당신은 절대 경로를 사용해야합니까?
garethTheRed

1
@garethTheRed 그것은 말할 것이다./menuScript.sh: command not found
Michael Mrozek

@MichaelMrozek-공정한 것. 방금 확인한 No such file or directory결과 OP는 여전히 OP의 오류와 다릅니다. 요점은 여전히 ​​존재합니다. 별칭이 항상 menuScript.sh상주 하는 디렉토리에서만 사용되지 않는 한 절대 경로를 사용하는 것이 가장 좋습니다 .
garethTheRed

1
@ryekayo done :)
Con7e

답변:


9

로 시도해야합니다 alias menu='bash ./menuScript.sh'. 나는 현재 Linux 시스템에 있지 않으므로 직접 테스트 할 수는 없지만 작동해야합니다. 별명을 호출하면 경로와 함께 무엇을해야할지 알 수 없으므로 bash시작 부분에를 포함시켜야합니다 .

터미널을 재설정하면 변경 후 도움이됩니다.


하지 않는 한 - 나는 첫 번째 단락이 중요 이해가 안 돼요 menuScript.sh되지 않았습니다 chmod실행 파일에 'ED,이 오류 메시지가했을 경우 "사용 권한이 거부되었습니다." .bashrc파일을 다시 읽도록 강요하는 것이 답 이라고 생각합니다 . PS… 셸은 ./menuScript.sh파일을 실행하려고 하면 사용자가 입력 할 때와 동일한 방식으로 경로를 사용하여 수행 할 작업을 알고 있습니다.
Scott

7

당신이 할 때

alias menu='./menuScript.sh'

"해당 파일"이라고하는 별명을 작성하지만 실제로는이 파일로 수행 할 작업을 말하지 않습니다.

그러나 당신이 할 경우

alias menu='source ./menuScript.sh'

또는

alias menu='. ./menuScript.sh'

그 파일을 실행 한다고 말하고 있습니다 .


6

변경 후 ~ / .bashrc 파일을 소싱하는 것을 기억 했습니까? 컴퓨터를 다시 시작하거나 파일을 소싱 한 후에 .bashrc 파일에 변경 사항이 적용되기 때문입니다.


2
이 유형의 게시물은 댓글에 더 적합한 것처럼 보입니다.
HalosGhost

2
@HalosGhost 어떻게 알아? 그것은 내가 생각할 첫 번째 일입니다. 정확히 이것을 일으킬 것입니다
Michael Mrozek

@MichaelMrozek, 나는 답변 게시물이 결정적인 솔루션을 제공 해야하는 것처럼 보이기 때문에 이것을 제안합니다. "당신은 소스를 잊어 버렸습니다 .bashrc. 반면, 질문을 명확하게하는 것 (예 : "당신은 잊었습니까? 이 게시물이 답변에 훨씬 더 적합 해 보이게 만드는 데 많은 비용이 들지 않습니다.
HalosGhost

컴퓨터를 다시 시작하면 문제가 해결되지만 tty 또는 세션에서 로그 아웃하면됩니다 (로그인 관리자를 사용하는 경우). 당신은 그래픽 환경에 로그인, 당신은하고 싶지 않은 경우 source ~/.bashrc또는 . ~/.bashrc다음 방금 또 다른 쉘을 열 수 있습니다. 그렇게 간단합니다. 재부팅이 필요 없습니다.
Dylan

0

그것이 작동하는 이유 vim는 직접 경로없이 이미 호출 가능한 프로그램이기 때문입니다. vim이미 "프로그램으로 실행하고 싶다"고 명시 적으로 말할 필요는 없습니다 . 명령을 받으면 vim파일을 이동 /usr/bin/vi하거나 실제 프로그램이있는 곳이면 어디든지 OS에 하드 코딩됩니다 .


아뇨, OS에 하드 코딩되어 있지 않습니다. 라는 파일이 vim에서 사용할 수 $PATH에 대한 당신이 항목을 제거하면 .. 다른 프로그램에 바이너리 실행, 실행 스크립트, 또는 심볼릭 링크가 될 수 vim는 사용자가 사용할 수 중단은.
roaima

@roaima 내가 의미하는 것은 vim을 호출하는 것은 사용자 정의 프로그램을 호출하는 것과 약간 다르다는 것입니다. 나는 당신이 무엇을 받고 있는지 알고 동의합니다
Nathanael Morgan

나는 ifvi내 안에 사는 스크립트를 가지고 $HOME/bin있습니다 $PATH. 시스템 설치 바이너리를 실행할 때와 같은 방식으로 사용합니다. 사용자 정의 프로그램인지는 중요하지 않습니다.
roaima

0

별명에는 두 가지 문제가 있습니다

alias menu='./menuScript.sh'
  1. 별명을 호출 할 때 특정 디렉토리에 있어야합니다. menuScript.sh존재하지 않는 디렉토리에 있으면 별칭이 실행되지 않습니다.

    menuScript.sh별칭을 정의 할 때 스크립트에 대한 전체 절대 경로를 지정하면 더 좋습니다 ( 예 :

    alias menu="$HOME/local/bin/menuScript.sh"

    또는 유사합니다.

  2. 다른 사람들이 이미 말했듯이, 별칭이 실패하는 또 다른 이유는 스크립트가 실행 가능하지 않거나 유효하지 않은 행이기 때문입니다 #!. 스크립트가 실행 가능한지 확인하십시오

    chmod +x menuScript.sh

    스크립트의 첫 번째 줄은

    #!/bin/bash

    또는 시스템에서 경로가 bash무엇이든 (또는 스크립트가 작성된 쉘) 무엇이든.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.