Linux/bash에서 약간 더 복잡한 스크립트에 대한 별칭 추가

Linux/bash에서 약간 더 복잡한 스크립트에 대한 별칭 추가

Stormvirux는 다른 스레드에서 이 멋진 스크립트를 제공했습니다. 목록 출력에 열 헤더를 넣습니다 ls -l.

#!/bin/bash
{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk 'NR!~/^(2)$/'
ls -l | head -1

명령줄에서 실행하면 됩니다. 나는 그것을 좋아하고 lslbash를 실행하는 Linux 시스템에서 별칭으로 사용하고 싶습니다 .

그러나 나는 구분 기호가 올바르게 해석되도록 작동시키는 방법을 평생 알아낼 수 없습니다. 명령줄에서 alias 명령을 사용하려고 하면(예: 구성 파일에 제출하기 전에 이 작업을 수행함 .bashrc) 작동하지 않습니다. 올바르게 해석될 수 있도록 다양한 방법으로 패키징하려고 하면 다양한 오류가 발생합니다.

누군가 이것을 별칭으로 작동하게 하는 방법을 알려주거나 이와 같은 것을 별칭으로 작동하게 하려면 무엇을 해야 하는지 명확하게 알려주는 좋은 참조를 알려줄 수 있습니까?

답변1

또 다른 방법은 함수로 정의할 수 있습니다 .bashrc.

lsl() {
  { echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename;
  ls -l; } | 
  column -t | 
  awk 'NR!~/^(2)$/'
  ls -l | head -1
}

답변2

별칭으로 사용해야 하는 경우:

alias lsl='{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk '\''NR!~/^(2)$/'\'';ls -l | head -1'

중지 문자열로 해석되지 않도록 내부 작은따옴표를 백슬래시로 이스케이프해야 합니다.

큰따옴표를 사용하면 다음과 같이 해석 !됩니다 .역사적 확장더 많은 이스케이프가 필요하므로 아마도 가장 혼란스러운 문제일 것입니다( bash: !~/^: event not found이해할 수 없는 횡설수설인 " "와 같은).


위의 방법도 효과가 있지만 더 좋은 방법은 파일을 경로 어딘가에 두고 실행 가능하게 만드는 것입니다. 예를 들어, 게시물의 내용을 포함하는 ~/.local/bin스크립트를 만든 다음 이를 다음으로 보냅니다 .lslchmod +x ~/.local/bin/lsl.bashrc

export PATH="$HOME/.local/bin:$PATH"

해당 디렉터리에서 실행 파일을 찾을 수 있는지 확인합니다. 그런 다음 lsl어디에서나 코드를 실행하도록 작성할 수 있습니다 . 이 접근 방식은 유지 관리가 더 쉽고 이해하기 쉽습니다.

관련 정보