별명없이 한 줄로 두 명령을 순서대로 실행하기 위해 and 명령 의 apt up
일부 를 재사용하는 방법 .apt update
apt upgrade
같은 것 : apt up{date,grade}
.
별명없이 한 줄로 두 명령을 순서대로 실행하기 위해 and 명령 의 apt up
일부 를 재사용하는 방법 .apt update
apt upgrade
같은 것 : apt up{date,grade}
.
답변:
간단한 방법 (보다 효율적인)은 for 루프를 사용하는 것입니다 (한 줄에 있지만 명확성을 위해 여러 줄로 표시됨).
for i in {date,grade}; do
apt up${i}
done
현명한 방법은 ~/.bashrc
이 두 명령 의 별칭을 만들고 다시 입력하는 것을 잊어 버리는 것입니다.
alias upgrade=' sudo apt update && sudo apt upgrade'
정교한 방법은 다음과 같습니다.
$ echo sudo" "apt" "up{"date","grade"}" && " :
sudo apt update && sudo apt upgrade && :
무슨 일인지 알 겠어? 우리는 쉘이 실행할 유효한 텍스트 문자열을 만들고 있습니다. 이제는을 eval
대신 사용하면 됩니다 echo
. 그러나 eval
일반적으로 쉘 스크립팅에서는 권장되지 않으며이 명령은 for 루프보다 훨씬 복잡하고 이식성이 없습니다. 평가없이 테마에 변화 (최단 지금까지,하지만 효율적으로 인해 파이프와 다수의 명령에 echo
,이 apt
, sudo
및 sh
분기의 많은 정도) :
$ echo "apt "{update,upgrade}";"|sudo sh
우리는 또한 사용할 수있는 set
위치 매개 변수에 원하는 순서를 설정하고 바로 실행 apt
에 $1
및 $2
인수 :
$ set {update,upgrade}; echo apt $1 && echo apt $2
apt update
apt upgrade
또는 for 루프에서 시퀀스를 지정하지 않으면 위치 매개 변수를 처리하도록 기본 설정되므로 for 루프를 다시 사용하십시오. for variable (sequence)
$ set {update,upgrade} ; for i; do echo apt $i ;done
apt update
apt upgrade
사용 set
은 쉘을 많이 사용하는 전문가들 사이에서 볼 수있는 매우 일반적인 기술이며, 그 이유는 매우 이식성이 뛰어나 /bin/sh
배열이나 {a,b,c}
확장 이없는 곳 에서 작동 합니다. POSIX-ly 휴대용 방법은 다음과 같습니다 set update upgrade ; for i; do echo apt $i ;done
. 또한 이것은 효율적이어야합니다.
또는 우리는 while
루프 경로를 갈 수 있습니다 :
$ echo {date,$'\n',grade}|while read i;do echo apt up${i}; done
apt update
apt upgrade
물론 echo
실제 명령을 실행 하지 않고 실행해야합니다.
for i in {date,grade}; do sudo apt up${i}; done
~/.bash_aliases
있습니다. 이 파일은에 의해 자동으로 제공됩니다 ~/.bashrc
.
apt
다른 인수 (업데이트 및 업그레이드)로 두 개의 명령 (예, 두 개의 명령) 을 실행하려고 할 때이 작업을 수행 할 필요가 없으므로 for 루프가 계속 진행됩니다.
for i in date grade; do
upgrate
.
bash history expansion 을 사용 하여 현재 명령 행의 일부를 가져 와서 수정할 수 있습니다.
$ apt update; !#:s/date/grade
apt update; apt upgrade;
Reading package lists... Done
...
!#
현재 줄입니다:s/date/grade
개질제 그 대체품이다 date
과grade
!#:s/dat/grad
대신 사용하여 2 개의 문자를 더 저장할 수도 있습니다
xargs
대신에 사용 하는 또 다른 간단한 옵션 for
:
echo up{dat,grad}e | xargs -n1 apt
테스트:
$ echo up{dat,grad}e | xargs -n1 echo apt
apt update
apt upgrade
그러나 Sergiy와 같은 쉘 별명을 선호합니다. 이러한 "간단한"방법은 실제로 유용 할 정도로 단순하지 않기 때문입니다.
printf "%s\n" {date,grade} | xargs -I% -n1 echo apt up%
는 조금 더 길지만 테마에 변형 이 있을 수 있습니다.
printf '%s'
예를 들어 --help
또는로 이스케이프 할 수 없으므로 일반적으로 좋은 방법 -e
입니다.
printf '%s\0'
더 좋을 것입니다. xargs
null로 끝나는 인수를 처리하는 플래그가 있습니다