사용자가 실행하려는 명령을 실행하기 전에 다른 명령을 실행하십시오.


9

ls이 방법으로 도구 의 원래 동작을 수정하고 싶다고 가정 해 봅시다 .

$ ls
Hello World
file1 file2 ...

어떻게해야합니까?

실행할 때 ls다른 명령을 실행하고 싶습니다 echo "Hello World!".

내가 보는 빠른 해결책은 별칭을 사용하는 것입니다.

alias orig_ls="ls"
alias ls='echo "Hello World!"'

그러나 이것이 실행될 orig_ls때 출력 할 것이기 때문에 이것은 실제 솔루션이 아닙니다 "Hello World!".


사용자 자신의 경로에 다른 ls를 넣고 이것을 사용하여 원본을 연결하십시오.
peterh-복 직원 모니카

답변:


12

때로는 별칭이 원하는 것을 쉽게 수행 할 수있을만큼 강력하지 않기 때문에 별칭을 사용하지 않는 방법이 있습니다.

쉘이 시작될 때 제공되는 일부 파일 (예 .bashrc:)에 다음 기능을 추가하십시오.

ls () {
    echo "Hello world!"
    command ls "$@"
}

별명과 달리 함수는 재귀 할 수 있습니다. 이것이 command ls대신에 사용되는 이유 입니다 ls. ls방금 정의한 함수 대신 실제 쉘을 사용하도록 쉘에 지시합니다 .


2
과연. 이 솔루션은 더 잘 확장됩니다. +1
PythonNut

commandOS X 의 대안 은 무엇입니까 ?
Ionică Bizău

@ IonicăBizău 나는 command작동하지 않았다는 것을 모른다 : / 나는 모른다. 나는 그것을 시험 할 Mac이 없다. 죄송합니다.
undergroundmonorail

9

당신은 전화하는 것을 잊지 않아야합니다 ls:

alias ls='echo "Hello World!"; ls'

하아! 나는 이것이 무한 사이클을 만들 것이라고 생각했습니다! 그러나 왜 무한 루프를 만들지 않습니까?
Ionică Bizău

1
대신 alias ls 'echo "Hello World!"; / usr / bin / ls '
jamesqf

5
@ IonicăBizău 지정된 "별칭 확장 규칙"은 한 번만 사용됩니다.
David Z

&도 함께 둘을 합류 하시겠습니까? 또한 사용자 정의 명령이 작동하는 경우에만 사용자 명령이 실행되도록 할 것입니다.
Fund Monica의 소송

@QPaysTaxes 당신은 &실제로 사용할 수 있지만 나는 당신이 그것에 대한 주장을 얻지 못합니다.
Hauke ​​Laging
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.