csh에서 \! *와 유사한 Bash 별명 히스토리 대체


3

내 질문은 이 오래된 게시물 의 질문과 매우 유사합니다 .

비슷한 것을하고 싶습니다 : 현재 명령 줄에 입력 한 마지막 인수를 별칭에 배치하십시오. csh \!*별명에 사용할 수 있는 것과 같습니다 .

참조 된 게시물에 따르면 문제는 bash의 기록 확장 인 것처럼 들리므로 fc가 대신 사용됩니다. 아이디어는 alias cat='cat -n !!:* && echo ""'(확장 문제로 인해 작동하지 않는 간단한 예제 와 같이) 일련의 명령 중간에 대체 작업을 수행하는 것 입니다.

그러나 이것은 첫 번째 명령 이외의 인수 만 가져오고 싶다는 점에서 참조 된 게시물과 다릅니다 (즉, 게시물에서는 0 번째 인수 인 명령을 제외하고 전체 줄이 아닌 전체 줄을 가져옵니다) 그 자체).

bash 별칭 에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까? (참고 : 이것을 스크립트 나 함수가 아닌 별칭으로 유지하려고합니다).


스크립트와 함수에는 큰 차이가 있습니다. bash 함수는 별명과 같이 메모리에 존재합니다. 여기서 사용하지 않을 이유가 없습니다. csh 별명에서 히스토리 대체를 사용하여 명령을 단순히 대체하는 것 이상의 작업을 수행하는 것은 csh에 적절한 서브 루틴이 없기 때문에 필요한 해킹입니다.
Mark Reed

답변:


2

간단한 단일 명령 대체 이외의 별칭은 사용하지 않는 것이 가장 좋습니다. 인수, 여러 명령 등을 사용하려면 스크립트에서와 같은 방식으로 매개 변수 에 액세스 하는 함수를 정의 할 수 있습니다 .

foo() {
    do_this
    do_that "$1"
}

cat() { command cat "$@" && echo ""; }

일반적으로 함수는 실행 파일을 대체하므로 command cat함수를 건너 뛰고 실행 파일을 직접 실행하려면 필요합니다.


감사합니다. 그러나 편집 내용을 추가했습니다 ((참고 : 스크립트 나 함수가 아닌 별칭으로 유지하려고합니다).) 별명은 강력한 도구가 될 수 있으며, 학문적 이유로도 이와 동등한 기능을 얻는 데 필요한 것이 무엇인지 알고 싶습니다 (예 : csh와 같은 다른 쉘과 비교). 별도의 토큰에서 아마도 이것은 아마도 bash의 사고 방식과 다른 쉘 패러다임의 사고 방식의 차이일까요?
bossNova

별명은 별명 중간에 인수를 지원하도록 의도되지 않았습니다. 그들은 항상 단순한 명령 대체물이었습니다. 별칭 내에서 히스토리 확장을 사용하는 것은 항상 끔찍한 해킹이었으며 요즘은 대부분 더 나은 것을 지원하지 않는 쉘에서 주로 사용되며 bash 더 나은 옵션이 있습니다. 즉, 기능.
grawity
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.