동일한 매개변수를 가진 여러 명령을 한 줄로 변환하는 방법을 찾고 있습니다.

동일한 매개변수를 가진 여러 명령을 한 줄로 변환하는 방법을 찾고 있습니다.

나는 때때로 다음과 같은 일을 하게 됩니다.

:

~에서~/blah

$ mkdir ~/test-tmp
$ cp * ~/test-tmp
$ cd ~/test-tmp

대상 디렉터리를 연속 3회 사용합니다. 이것을 한 줄 명령으로 바꾸는 방법이 있습니까?

답변1

이게 네가 말하는거야?

mkdir ~/test-tmp && cp * ~/test-tmp && cd ~/test-tmp

또는

function mm() {
  local dir=$1
  if [ ! -z "$dir" ]
  then
    mkdir ~/${dir} && cp * ~/${dir} && cd ~/${dir}
  fi
}

답변2

Bash에서는 마지막으로 실행한 명령에 대한 인수가 다음 파일 에 !$기록됩니다.man bash

   !      Start a history substitution, except when followed by  a  blank,
          newline,  carriage return, = or ( (when the extglob shell option
          is enabled using the shopt builtin).
   [...]
   $      The last argument.

그래서, 당신은 이것을 할 수 있습니다

$ mkdir ~/test-tmp ; cp * !$ ; cd !$

아니면 간단히

$ mkdir ~/test-tmp
$ cp * !$
$ cd !$

답변3

문제가 다시 입력되는 경우 ~/test-tmp다음을 수행하여 명령을 단축하고 한 줄로 결합할 수 있습니다.

D=~/test-tmp; mkdir $D; cp * $D; cd $D

경로에 공백이 포함되어 있으면 작업을 인용해야 합니다.그리고변수를 사용하는 위치:

D="~/test tmp"; mkdir "$D" ; cp * "$D"; cd "$D"

관련 정보