Bash에서 별칭 지정시기, 스크립트 작성 시점 및 함수 작성시기는?


360

이 질문을하는 데 거의 10 년의 Linux 사용 시간이 걸렸습니다. 모든 시행 착오와 무작위 심야 인터넷 서핑이었다.

그러나 사람들은 이것을 위해 10 년이 필요하지 않아야합니다. Linux로 시작한 경우 별칭을 언제 지정하고 언제 스크립트를 작성하고 언제 함수를 작성 해야하는지 알고 싶습니다 .

별칭과 관련하여 인수를 사용하지 않는 매우 간단한 작업에 별칭을 사용합니다.

alias houston='cd /home/username/.scripts/'

분명해 보인다. 그러나 어떤 사람들은 이것을합니다 :

alias command="bash bashscriptname"

(그리고 .bashrc파일에 추가 하십시오)

그럴만한 이유가 있습니까? 나는 정말로 열심히 노력하고 있지만, 내가하고 싶은 어떤 상황도 진정으로 생각할 수 없습니다. 따라서 차이가 발생할 수있는 가장 중요한 경우가 있다면 아래에 답변하십시오.

그것이 바로 PATH에 무언가를 넣는 곳이기 때문에 chmod +x수년간의 Linux 시행 착오 후에 나온 또 다른 것입니다.

다음 주제로 넘어갑니다. 예를 들어, .scripts/.bashrc( PATH=$PATH:/home/username/.scripts/) 행을 추가하여 홈 디렉토리 의 숨겨진 폴더 ( )를 PATH에 추가 했기 때문에 자동으로 자동 완성됩니다.

내가 필요한 경우.

그래도 꼭 필요하지는 않습니까? 파이썬과 같이 쉘이 아닌 언어에만 사용합니다.

쉘이라면 매우 동일한 함수를 작성할 수 있습니다 .bashrc.

funcname () {
  somecommand -someARGS "$@"
}

내가 말했듯이 시행 착오를 통해 많은 것을 발견했습니다. 그리고 나는 컴퓨터가 죽었을 때만 기능의 아름다움을 보았고, 주변 사람들이 컴퓨터를 사용하지 않을 때 컴퓨터를 사용해야했습니다.

전체 스크립트 디렉토리를 컴퓨터에서 컴퓨터로 옮기는 대신 단일 수정을 한 적이 없었기 때문에 다른 모든 .bashrc를 내 것으로 교체했습니다.

그러나 나는 무엇을 놓쳤습니까?

그렇다면, 초기 Linux 사용자에게 별칭 지정시기, 스크립트 작성시기 및 함수 작성시기에 대해 무엇을 알려주겠습니까?

분명하지 않다면, 이것에 대답하는 사람들이 세 가지 옵션을 모두 사용한다고 가정합니다. 별명 만 사용하거나 스크립트 만 사용 하거나 함수 만 사용 하거나 별명과 스크립트 또는 별명과 기능 또는 스크립트와 기능 만 사용하는 경우이 질문은 실제로 사용자를 대상으로하지 않습니다.



10
이 질문의 목표가 아닌 {alias, script, function}의 모든 하위 집합을 명시 적으로 언급하면 ​​+1입니다. 널 하위 집합을 생략해도 괜찮다는 아이 같은 믿음에 +1합니다.
토마스 엘 할러데이

1
이 질문은 bash에 대해 특별히 묻었지만 오래된 Bourne 쉘에는 '별칭'이 있지만 기능은 없습니다. 호환성이 걱정된다면 차이가 생길 수 있습니다.
AndyB

.bashrc가 실제로 가장 좋은 장소이거나 적어도 단단한 장소라면? 리눅스에는 똑같은 일을하는 방법이 너무 많습니다.하지만 모든 것이 평등하다는 것을 알고 있지만 가장 일반적인 방법으로 일하는 것을 선호합니다.
Kit10

답변:


242

별명은 일반적으로 명령의 기본 옵션을 변경하는 것 이상을 효과적으로 수행하지 않아야합니다. 명령 이름에 대한 단순한 텍스트 대체 일뿐입니다. 인수로는 아무것도 할 수 없지만 실제로 실행되는 명령에 전달합니다. 따라서 단일 명령 앞에 인수를 추가하면 별칭이 작동합니다. 일반적인 예는

# Make ls output in color by default.
alias ls="ls --color=auto"
# make mv ask before overwriting a file by default
alias mv="mv -i"

별명보다 복잡한 것을 수행해야하지만 자체적으로 사용되지 않는 함수를 사용해야합니다. 예를 들어 파이프 라인에 있는지 여부에 따라 기본 동작을 변경하는 것에 대한 질문 에이 대답 을 사용하십시오 grep.

grep() { 
    if [[ -t 1 ]]; then 
        command grep -n "$@"
    else 
        command grep "$@"
    fi
}

별명에 대해 너무 복잡하기 때문에 (조건에 따라 다른 기본값이 필요함) 함수의 완벽한 예이지만 비 대화식 스크립트에는 필요하지 않습니다.

너무 많은 함수 또는 함수를 얻는 경우 숨겨진 디렉토리에 별도의 파일로 넣고 다음에서 소스를 찾으십시오 ~/.bashrc.

if [ -d ~/.bash_functions ]; then
    for file in ~/.bash_functions/*; do
        . "$file"
    done
fi

스크립트는 자체적으로 있어야합니다. 재사용하거나 여러 용도로 사용할 수있는 가치를 가져야합니다.


14
로 공급하지 않는 한 - 그것은 것을 기억하는 것도 중요합니다 .또는 source- 스크립트가 별도의 bash는 프로세스에 의해 실행되고, 자신의 환경을 가지고있다. 이러한 이유로 쉘 환경을 수정하는 것 (예 : 함수, 변수 등)은 스크립트를 실행하는 쉘 환경에 유지되지 않습니다.
Will Vousden

260

다른 답변은 개인적인 취향을 기반으로 한 일반적인 일반적인 지침을 제공하지만 스크립트, 함수 또는 별칭 사이를 결정할 때 고려해야 할 많은 관련 사실 을 무시하십시오 .

별명 및 기능 ¹

  • 별명과 함수의 전체 내용은 쉘의 메모리에 저장됩니다.
  • 이것의 자연스러운 결과는 별칭과 함수는 현재 쉘 에서만 사용할 수 있으며 텍스트 편집기, 스크립트 또는 같은 쉘의 자식 인스턴스와 같이 쉘에서 호출 할 수있는 다른 프로그램에서는 사용할 수 없습니다.
  • 별명과 함수는 현재 셸에서 실행됩니다. 즉, 셸 내에서 실행되고 셸의 현재 환경에 영향을줍니다 .² 별명이나 함수를 실행하기 위해 별도의 프로세스가 필요하지 않습니다.

스크립트

  • 쉘은 스크립트를 메모리에 보관하지 않습니다. 대신 스크립트는 필요할 때마다 저장된 파일에서 스크립트를 읽습니다. $PATH검색을 통해 스크립트를 찾은 경우 , 많은 셸에서 경로 이름의 해시를 메모리에 저장하여 향후 $PATH조회 시간을 절약 할 수 있지만 사용하지 않을 경우 스크립트의 메모리 사용 공간 정도입니다.
  • 스크립트는 함수와 별명보다 더 많은 방법으로 호출 할 수 있습니다. 그것들은 같은 인터프리터에 인수로 전달 sh script되거나 실행 파일로 직접 호출 될 수 있습니다 .이 경우 shebang 라인 (예 :)의 인터프리터 #!/bin/sh가 호출됩니다. 두 경우 모두 스크립트는 쉘 환경과 별개로 자체 환경이있는 별도의 인터프리터 프로세스에 의해 실행되며 환경은 스크립트가 어떤 식으로도 영향을 줄 수 없습니다. 실제로 인터프리터 쉘은 호출하는 쉘과도 일치하지 않아도됩니다. 이러한 방식으로 호출 된 스크립트는 일반 실행 파일처럼 작동하므로 모든 프로그램에서 사용할 수 있습니다.

    마지막으로, .또는 일부 셸을 사용하여 현재 셸에서 스크립트를 읽고 실행할 수 있습니다 source. 이 경우 스크립트는 지속적으로 메모리에 보관되지 않고 주문형으로 읽는 기능과 매우 유사합니다.

신청

위의 내용을 감안할 때 스크립트 또는 함수 / 별칭을 만들지에 대한 일반적인 지침을 제시 할 수 있습니다.

  • 쉘 이외의 다른 프로그램에서도 사용할 수 있어야합니까? 그렇다면 스크립트 여야합니다.

  • 대화식 쉘에서만 사용할 수 있도록 하시겠습니까? 외부 명령 / 스크립트에 영향을주지 않고 대화식으로 실행할 때 많은 명령의 기본 동작을 변경하는 것이 일반적입니다. 이 경우 쉘의 "대화식 모드 전용"rc 파일에 설정된 별명 / 함수를 사용하십시오 ( bash이것은 .bashrc).

  • 쉘 환경을 변경해야합니까? 기능 / 별명 또는 소스 스크립트 모두 선택할 수 있습니다.

  • 자주 사용하는 것입니까? 메모리에 보관하는 것이 더 효율적일 수 있으므로 가능하면 기능 / 별칭으로 만드십시오.

  • 반대로, 거의 사용하지 않는 것입니까? 이 경우 필요하지 않을 때 메모리를 낭비하는 것이 의미가 없으므로 스크립트로 만드십시오.


¹ 함수와 별칭은 몇 가지 중요한 차이점이 있지만 함수는 별칭이 할 수있는 모든 작업을 수행 할 수 있으므로 그룹화됩니다. 별명은 지역 변수를 가질 수 없으며 인수를 처리 할 수 ​​없으며 한 줄보다 길면 불편합니다.

² Unix 시스템에서 실행되는 모든 프로세스 에는 기본 로케일 및 실행 가능한 검색 경로 지정 과 같은 전역 구성 설정이 포함 된 여러 쌍 으로 구성된 환경이variable=value 있습니다 .LANGPATH


26
IMHO 이것이 가장 좋은 답변입니다.
Luc M

4
질문 / 답변 형식은 좋은 생각입니다. 나는 그것을 훔칠 수 있습니다. ;-)
Mikel

4
주의 할 점 : 두 개 이상의 스크립트가 일부 코드를 공유해야하는 경우 해당 스크립트를 모두 가져 오기 / 소스하는 세 번째 파일에있는 함수에 해당 코드를 넣는 것이 가장 좋습니다.
kbolino

3
해당 질문 목록에 추가 할 다른 항목 : 즉석에서 명령의 기능을 변경해야합니까? 스크립트 변경 사항은 모든 세션에 반영되지만 기능 및 별칭은 세션별로 다시로드하거나 다시 정의해야합니다.
Stratus3D

3
좋은 대답입니다. 또 다른 중요한 점은 다른 유틸리티에 대한 "바로 가기"를 만들 때 기존 자동 완성 기능은 별칭이나 스크립트 또는 함수 (별칭의 경우 +1)와는 작동하지 않기 때문에 별칭을 사용하는 것이 좋습니다. 예를 들어 별칭을 alias g='gradle'사용할 때는 Gradle 자동 완성 기능 을 만들지 g만 다음과 함께 스크립트를 사용 gradle $*하거나 함수를 사용할 때는 즉시 사용할 수 없습니다.gradle $@
Yoav Aharoni

37

나는 그것이 각자의 취향에 달려 있다고 생각합니다. 나를 위해 논리는 다음과 같습니다.

  • 먼저 가장 단순하기 때문에 별칭을 만들려고합니다.
  • 일이 너무 복잡하여 한 줄에 들어 가지 않으면 기능으로 만들려고합니다.
  • 함수가 12 줄 이상으로 커지기 시작하면 스크립트에 넣습니다.

실제로 작동 하는 것을 제한하는 것은 없습니다 .


6
나는 종종 기능 옵션을 건너 뛰고 즉시 스크립트를 만듭니다. 그러나 나는 그것이 맛의 문제라는 것에 동의합니다
Bernhard

2
여러 스크립트에서 필요한 경우 함수가 이해되기 시작합니다.
Nils

7
... 또는 현재 쉘 을 변경하기 위해 부작용이 필요한 경우 .
glenn jackman

말이 되네요!
탐험가

15

적어도 부분적으로 개인적인 취향의 문제입니다. 반면에 몇 가지 명확한 기능적 차이점이 있습니다.

  • 별칭 : 간단한 텍스트 교체에만 적합하며 인수 / 매개 변수가 없습니다.
  • 기능 : 쓰기 / 사용 용이, 전체 쉘 스크립팅 기능, bash 내에서만 사용 가능
  • 스크립트 : 다소 비슷한 기능이지만 bash 외부에서도 사용 가능 (호출 가능)

쉘 스크립팅을 살펴본 결과 지난 몇 년 동안 나는 별칭 작성을 중단했습니다 (모두 시간이 지남에 따라 함수로 성장하는 경향이 있기 때문에).

추신 : alias command="bash bashscriptname"실제로이 작업을 수행 할 이유가 없습니다. bashscriptname$ PATH에 없더라도 간단 alias c=/path/to/script합니다.


1
에서 alias command="bash bashscriptname"스크립트를 반드시 실행해야하지 않는다; 에 alias c=/path/to/script그것은에 있습니다.
마틴-マ ー チ ン

모든 기능이 "Bash 내에서만 사용 가능"하다는 것은 사실이 아닙니다. 그것이 Bash 전용 기능이라고 말하면, 그것은 단순히 거짓입니다 (Bourne shell과 모든 호환되는 파생물이 있습니다). 대화식 쉘의 기능이라고 말하면 정확하지 않습니다 (대화식 쉘로 시작할 때로 드되는 파일에 정의 된 별칭, 변수 및 함수는 분명히 비 대화식 쉘에서는로드되지 않습니다).
tripleee

@tripleee 의미는 " exec()함수를
셸할

11

별명 및 함수에 대한 추가 사항은 다음과 같습니다.

  • 동일한 이름의 별칭과 기능이 공존 할 수 있습니다
  • 별칭 네임 스페이스가 먼저 조회됩니다 (첫 번째 예 참조)
  • 서브 쉘 또는 비 대화식 환경에서 별명 설정 (해제) 할 수 없습니다 (두 번째 예 참조).

예를 들면 다음과 같습니다.

alias f='echo Alias'; f             # prints "Alias"
function f { echo 'Function'; }; f  # prints "Alias"
unalias f; f                        # prints "Function"

보다시피 별명과 함수에 대한 별도의 네임 스페이스가 있습니다. 보다 자세한 내용은 declare -A -p BASH_ALIASESand를 사용하여 declare -f f정의를 인쇄합니다 (둘 다 메모리에 저장 됨).

별명 제한을 보여주는 예 :

alias a='echo Alias'
a        # OK: prints "Alias"
eval a;  # OK: prints "Alias"
( alias a="Nested"; a );  # prints "Alias" (not "Nested")
( unalias a; a );         # prints "Alias"
bash -c "alias aa='Another Alias'; aa"  # ERROR: bash: aa: command not found

보시다시피 함수와 달리 별칭은 중첩 가능하지 않습니다. 또한 사용법은 대화식 세션으로 제한됩니다.

마지막으로 다음과 같이 함수를 즉시 호출하여 선언하여 별칭에서 임의 계산을 수행 할 수 있습니다.

alias a_complex_thing='f() { do_stuff_in_function; } f'

Git 별칭의 경우 이미 널리 사용됩니다. 함수를 선언하는 것의 이점은 .동일한 이름의 함수를 선언하는 스크립트를 소스 (또는)를 사용하여 간단히 별칭을 덮어 쓸 수 없다는 것 입니다.


10

스크립트 작성시기 ...

  • 스크립트는 소프트웨어 구성 요소 (일명 도구, 명령, 프로세스, 실행 파일, 프로그램)를보다 복잡한 구성 요소로 조립합니다.이 구성 요소는 더 복잡한 구성 요소로 조립 될 수 있습니다.
  • 스크립트는 일반적으로 실행 가능하므로 이름으로 호출 할 수 있습니다. 호출되면 스크립트를 실행할 새 하위 프로세스가 생성됩니다. 모든 exported 변수 및 / 또는 함수의 사본이 을 통해 스크립트 로 전달됩니다 . 이러한 변수에 대한 변경 사항 은 부모 스크립트로 다시 전파 되지 않습니다 .
  • 스크립트는 마치 호출 스크립트의 일부인 것처럼로드 (소스) 될 수도 있습니다. 이것은 다른 언어가 "import"또는 "include"라고 부르는 것과 유사합니다. 소싱되면 기존 프로세스 내에서 실행됩니다. 하위 프로세스가 생성되지 않습니다.

함수 작성시기 ...

  • 함수는 효과적으로 사전로드 된 쉘 스크립트입니다. 별도의 스크립트를 호출하는 것보다 약간 더 나은 성능을 발휘하지만 기계 디스크에서 읽어야하는 경우에만 가능합니다. 오늘날 사용되지 않는 RAM에서 플래시 드라이브, SSD 및 Linux의 일반적인 캐싱이 급격히 증가함에 따라 그 개선은 크게 측정 할 수 없습니다.
  • 함수는 모듈화, 캡슐화 및 재사용을 달성하는 bash의 주요 수단으로 사용됩니다. 스크립트의 명확성, 안정성 및 유지 관리 성을 향상시킵니다.
  • 함수를 호출하는 구문 규칙은 실행 파일을 호출하는 구문 규칙과 동일합니다. 실행 파일과 이름이 같은 함수가 실행 파일 대신 호출됩니다.
  • 함수는 스크립트에 포함되어 있습니다.
  • 함수를 익스포트 ( value로 복사 )하여 스크립트라고하는 내부에서 사용할 수 있습니다. 따라서 함수는 부모가 아닌 자식 프로세스에만 전파됩니다.
  • 함수는 종종 다른 스크립트에 의해 소싱되도록 라이브러리 (함수 정의 만있는 스크립트)로 어셈블되는 재사용 가능한 명령을 작성합니다.

별명을 쓰는시기 ...

라이브러리 스크립트와 같은 스크립트 내에서 함수의 이름이 변경되었지만 이전 버전과의 호환성이 필요한 경우와 같이 함수의 별칭이 필요한 경우가 있습니다. 이것은 모든 인수를 새로운 함수에 전달하는 이전 이름으로 간단한 함수를 작성하여 수행 할 수 있습니다 ...

# A bash in-script 'alias'
function oldFunction () { newFunction "$@"; }

9

내가 믿지 않는 또 하나의 사실은 함수가 호출 프로세스의 컨텍스트에서 실행되는 반면 스크립트는 새로운 쉘을 포크한다는 것입니다.

성능이 중요 할 수 있습니다 - 그것은하지 않기 때문에 함수, 빠른 fork()exec(). 일반적인 상황에서는 그 차이가 사소한 것이지만 메모리가 부족하고 페이지 스 래싱 인 시스템을 디버깅하는 경우 큰 차이를 만들 수 있습니다.

또한 현재 쉘 환경을 수정하려면 함수를 사용해야합니다. 예를 들어, 함수 $PATH는 현재 쉘 의 명령 조회 를 변경할 수 있지만 스크립트는 fork / exec 사본에서 작동하기 때문에 스크립트를 실행할 수 없습니다 $PATH.


어린이에게 이러한 기능 전파는 어떻게 작동합니까?
HappyFace

1
@HappyFace Bash에서는 export -f정확한 내부 작업이 다소 모호하지만 함수 를 사용할 수 있습니다 . 이것은 내가 믿는 전통적인 Bourne 쉘에는 이식성이 없습니다.
3

7

스크립트와 별칭, 스크립트와 기능은 상호 배타적이지 않습니다. 스크립트에서 별명 및 함수를 저장할 수 있습니다.

스크립트는 코드로만 만들어집니다 . 나중에 사용하고자하는 유용한 기능과 별칭은 스크립트에 저장됩니다. 그러나 스크립트는 종종 둘 이상의 함수의 모음입니다.

때문에 별명이 매개 변수가되지 않습니다 , 그들은 매우 제한되어 있습니다; 일반적으로 일부 기본 매개 변수를 정의합니다.

함수는 코드의 분리 부이고 , 더 작은, 유용한 부분으로 분리 할 수없는 몇 줄의 코드의 잘 정의 된 개념; 하나는 직접 또는 다른 기능으로 재사용 할 수 있습니다.


5

매우 빠르면 별명이나 함수로 만드십시오.

선호하는 쉘 외부에서 사용할 수 있으면 스크립트로 만드십시오. 1

인수가 필요한 경우 함수 또는 스크립트로 만듭니다.

특수 문자를 포함해야하는 경우 별명 또는 스크립트로 작성하십시오. 2

sudo와 함께 작동해야하는 경우 별명 또는 스크립트로 작성하십시오.

로그 아웃 및 로그인하지 않고 쉽게 변경하려면 스크립트가 더 쉽습니다. 4

각주

1 또는 별명으로 만들고에 넣고 ~/.env설정 export ENV="$HOME/.env"하지만 이식 가능하게 작동하는 것은 복잡합니다.

2 함수 이름은 식별자 여야하므로 문자로 시작해야하며 문자, 숫자 및 밑줄 만 포함 할 수 있습니다. 예를 들어 별칭이 alias +='pushd +1'있습니다. 함수가 될 수 없습니다.

3 그리고 별칭을 추가하십시오 alias sudo='sudo '. 명령을 첫 번째 인수로 취하는 다른 명령 (예 : strace, gdb등)을 분리하십시오.

4 참조 : fpath. 물론 할 수도 source ~/.bashrc있고 비슷할 수도 있지만 종종 다른 부작용이 있습니다.


1
나는 당신이 +bash에서 별칭을 사용할 수 있다는 것을 몰랐다 . 흥미롭게도, 테스트 후 나는 bash +에서 별명을 만들 수 는 있지만 함수는 말할 수 없지만 zsh는 반대로- +함수는 가능하지만 별명은 아닙니다.
Kevin

에서 zsh당신은 작성해야합니다 alias -- +='some command here'.
Mikel

어쨌든, 나는 앨리어싱 +이 이식 가능 하다고 생각하지 않습니다 . 별명에
jw013

3
sudo사용 범위 를 커버하기위한 공감 . 각주 4와 관련하여 별명 ~/.bash_aliases과 함수 정의를 저장 하여 부작용의 위험없이 ~/.bash_functions쉽게 해결할 수 있습니다 source.
Anthony Geoghegan

3

몇 가지 메모를 추가하기 만하면됩니다.

  • 예를 들어 시스템 파일을 편집해야하는 경우와 같이 별도의 스크립트 만 sudo와 함께 사용할 수 있습니다.
sudo v /etc/rc.conf  #where v runs vim in a new terminal window;
  • 별명 또는 함수 만 동일한 이름으로 시스템 명령을 대체 할 수 있습니다 (시스템 명령과 동일한 이름으로 스크립트를 우발적으로 또는 악의적으로 작성하는 경우 안전하도록 권장합니다). 예를 들면 다음과 같습니다.
alias ls='ls --color=auto'  #enable colored output;
  • 별명과 함수는 실행하는 데 메모리와 시간이 덜 걸리지 만로드하는 데 시간이 걸립니다 (쉘이 프롬프트를 표시하기 전에 모두 해석해야하기 때문에). 예를 들어, 새로운 쉘 프로세스를 정기적으로 실행하는 경우이를 고려하십시오.
# pressing key to open new terminal
# waiting for a few seconds before shell prompt finally appears.

그 외에는 가능한 가장 간단한 형식을 사용할 수 있습니다. 즉, 먼저 별칭, 기능, 스크립트를 고려하십시오.


5
별명도와 함께 사용할 수 있습니다 sudo. 그러나 먼저 당신이 필요합니다 alias sudo='sudo '.
Mikel

스크립트를 실행하면 포크 + 실행 기간 동안 일시적으로 더 많은 메모리를 소비하지만 현재 쉘 인스턴스의 메모리에 많은 코드가로드되면 앞으로 더 많은 메모리를 소비하게되어 종종 다음 코드 만 저장합니다. 상당히 드물게 사용됩니다.
tripleee

2

내 경험 법칙은 다음과 같습니다.

  • 별명-하나의 명령, 매개 변수 없음
  • 함수-하나의 명령 일부 매개 변수
  • 스크립트-몇 가지 명령, 매개 변수 없음

1

다중 사용자 (또는 다중 sysamin) 환경에서는 짧은 'exec something ....'래퍼로 끝나더라도 모든 스크립트를 사용합니다.

물론 별명이나 함수보다 기술적으로 느리거나 효율적이지 않지만 거의 중요하지 않으며 경로에 있으면 스크립트가 항상 작동합니다.

기능은 sudo 또는 env와 같이 환경이 축소되거나 수정 된 환경에서 cron에서 호출되거나 사용자가 다른 쉘을 사용하고 있거나 별명 또는 함수를 손상시킬 수 있습니다.

성능에 민감한 것이 있다면,이를 특수한 경우 또는 더 나은 방법으로 처리하십시오. 더 기능적인 스크립팅 언어로 다시 작성하는 트리거를 고려하십시오.

다른 스크립트에서만 사용되는 기능에 대해 이야기하고 있다면 표준 쉘을 정의하고 함수 라이브러리 스크립트를 작성하는 것도 고려할 수 있습니다. 다른 모든 스크립트에 소스를 제공했습니다.


0

별명을 사용하고자하는 상황의 예

나는 이것이 오래된 게시물이라는 것을 알고 있지만 스크립트와 별칭의 조합을 거의 사용해야하고 함수를 사용하지 않기로 결정한 상황을 지적하고 싶습니다 .

다음을 수행하는 ~/.bin/라는 스크립트가 있습니다 setup. 1

  1. 특정 디렉토리로 이동합니다.
  2. 몇 가지 변수를 정의합니다.
  3. 디렉토리 상태에 대한 메시지를 인쇄합니다. 2

요점은 방금 실행하면 setup <project-name>해당 변수가 정의되어 있지 않으며 디렉토리에 전혀 도달하지 않았을 것입니다. 내가 가장 좋은 것으로 판명이 솔루션은이 스크립트를 추가하는 것이었다 PATH과 추가 alias setup=". ~/.bin/setup"~/.bashrc또는 무엇 이건.

노트:

  1. 나는이 작업을 위해 스크립트를 사용했지만 특히 길기 때문에 기능이 아니라 편집 할 수 있기 때문에 사용법을 새로 고치려면 편집 후 파일을 소스로 만들 필요가 없습니다.
  2. 모든 도트 파일을 다시로드하는 스크립트를 만들 때 비슷한 경우가 발생했습니다.
  1. 이 스크립트내 dotfiles 저장소 에서 사용할 수 있습니다 .bin/.
  2. 스크립트 정보 :이 스크립트에 고급으로 정의한 프로젝트의 이름 인 인수를 제공합니다. 그 후 스크립트는 특정 csv파일 에 따라 올바른 디렉토리로 나를 안내 합니다. 정의한 변수는 해당 디렉토리의 makefile에서 가져옵니다. 스크립트는 나중에 실행 ls -l되고 git status무슨 일이 일어나고 있는지 보여줍니다.
  3. 이 스크립트는 내 dotfiles 저장소에서도 사용할 수 .bin/있습니다.

1
흠, 별칭 스크립트 조합이 아니라 함수 일 것 같습니다. (BTW, 환경은 "환경"이 아닌 "환경"철자입니다.)
Wildcard

오타에 대해 언급 해 주셔서 감사합니다. 다음 커밋에서 수정하겠습니다. 스크립트 대신 함수를 사용하는 경우-아마도이 특정 작업에 함수를 사용하고 이러한 별칭을 삭제합니다. 요점은 때때로 스크립트 를 편집 할 때 스크립트와 별칭을 사용하는 것이 매우 쉽다는 것 입니다.
Doron Behar

0

스크립트 작성시기

쉘 이외의 도구에서 명령을 실행하려는 경우

여기에는 vim (나를 위해)이 포함됩니다. 필터와 다른 프로그램을 스크립트로 작성하면 :%!my-filter편집기에서 프로그램을 통해 파일을 필터링하는 것과 같은 작업을 수행 할 수 있습니다 .

경우 my-filter함수 또는 별칭이었다, 그것은 가능하지 않을 것입니다.

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