단순화를 위해 별칭을 사용하여 명령을 지정해 보았습니다.
php artisan route:list | (head -n 3; grep checkout)
이 명령은 테이블의 제목을 표시하고 경로를 검색합니다. 결과는 다음과 같습니다.
+--------+----------+--------------------------------------------+----------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+---------------------------------------------+----------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+
| | POST | profile/auctions/checkout | user-portal-profile-auctions-checkout | xxxxxxxxxxxxxxxx | web,auth |
| | POST | profile/deals/checkout | user-portal-profile-deals-checkout | xxxxxxxxxxxxxx | web,auth |
| | POST | profile/quotes/checkout | user-portal-profile-quotes-checkout | xxxxxxxxxxxxxxx | web,auth |
이것이 내가 가진 것입니다 ~/.bash_profile
:
alias findRoute='php artisan route:list | (head -n 3; grep $1)'
하지만 계속해서 다음 오류가 발생합니다.
bash: syntax error near unexpected token `checkout'
무엇을 제공합니까? 왜 내 주장을 받아들이지 않는 걸까요?
전달하는 매개변수에 작은따옴표와 큰따옴표를 사용해 보았습니다.
별칭에 작은따옴표와 큰따옴표를 사용해 보았습니다. 아무것도 변하지 않습니다.
답변1
별칭 확장은 단지 텍스트 교체와 쉘에 의한 또 다른 구문 분석 라운드입니다.
당신이 들어갈 때
findRoute checkout
먼저 다음으로 확장하세요.
php artisan route:list | (head -n 3; grep $1) checkout
결과는 다시 쉘 코드로 구문 분석됩니다. 여기의 쉘 코드가 유효하지 않습니다.
여기서 스크립트나 함수를 사용할 수 있습니다. 좋다:
findRoute() {
php artisan route:list | {
head -n 3
grep -e "$1"
}
}
대부분의 구현은 전체 블록을 읽기 head
때문에 3줄만 출력하더라도 3줄 이상을 읽을 수 있다는 점에 유의하세요 . head
즉, grep
부분이 보이지 않습니다.
sed
GNU 구현이 있는 경우 head -n3
this 로 대체할 수 있습니다 sed -u 3q
. sed
여기서 입력은 한 번에 1바이트씩 읽혀 세 번째 개행 문자를 지나 읽는 것을 방지합니다.
또는 다음을 사용할 수 있습니다 awk
.
findRoute() {
php artisan route:list |
PATTERN=$1 awk 'NR <= 3 || $0 ~ ENVIRON["PATTERN"]'
}
조심하다(Beware) $1
는 다음과 같이 해석됩니다.확장하다grep -E
대신 정규 표현식(예: for )기초적인하나(있나요 grep
? -E
) 하위 문자열 검색(예 grep -F
: )의 경우 다음으로 바꾸세요.
findRoute() {
php artisan route:list |
PATTERN=$1 awk 'NR <= 3 || index($0, ENVIRON["PATTERN"])'
}