다른 매개 변수를 사용하여 동일한 명령을 실행


13

다음 명령을 실행할 수 있음을 알고 있습니다

ls Some{File,Folder}

그리고 이것을 실행하는 것과 같습니다.

ls SomeFile SomeFolder

(나는 또한 같은 것들에 많이 사용합니다 mv place_{a,b})

그러나 다음과 같이 할 수있는 다른 바로 가기가 있는지 궁금합니다.

run-command --a --whole --lot --of --flags parameter a; \
     run-command --a --whole --lot --of --flags parameter b

그리고 나는 타이핑 run-command --a --whole --lot --of --flags parameter {a,b}하거나 비슷한 것을 해야했습니다 .


에 따라 달라 run-command, 많은 유닉스 명령은 순서에 여러 파일 인수를 처리합니다.
vonbrand

답변:


13

GNU bash또는 이와 유사한 것을 사용한다고 가정합니다 .

아마도 for루프?

for x in a b
do
    run-command --a --whole --lot --of --flags parameter $x
done

한 줄에 다음과 같이 쓸 수도 있습니다. for x in a b; do run-command --a --whole --lot --of --flags parameter $x ; done


1
또는 많이 실행하고 싶다면 bash 확장을 사용할 수 있습니다for x in {a..z}; do ; run-command --a --whole --lot --of --flags parameter $x ; done
h3rrmiller

여러 가지 방법으로 공백으로 구분 된 목록이 생성 될 수 있습니다 . 그래서 그래, {a..z}, *.pdf, $(find ...)...
njsg

나는 왜 내 마음이 반복되지 않는지 모른다. 감사! 이것은 아마도 내가 사용하는 것입니다. 기능 아이디어는 좋지만 나는 이것을 더 좋아합니다.
ashays

1
하나의 라이너는 ;다음 do키워드를 제거한 후에 만 ​​나를 위해 일했습니다 .
jimp

@jimp 감사합니다 ;. 코드를 변경하여 제거했습니다 .
njsg

5

이 스크립트를 스크립팅하지 않고 명령 줄에서 쉽게 실행하려면 xargs명령이 원하는 것일 수 있습니다.

xargs는 표준 입력에서 많은 내용을 가져 와서 명령의 인수로 사용하여 필요한 경우 해당 명령을 여러 번 실행합니다.

다음을 시도하십시오 :

echo parameter a,parameter b | xargs -n 1 -d , run-command --a --whole --lot --of --flags

이 예제에서는 단순히 xargs에 원하는 순열을 제공합니다.

"-n 1"플래그는 xargs에게 실행 당 하나의 인수 만 사용하도록 지시합니다.

"-d,"플래그는 xargs에게 입력에서 ","를 찾아 인수 사이의 deliminator로 찾도록 지시합니다. 인수에 ","가 있으면이를 다른 것으로 변경해야합니다. 인수에 공백이 없으면이 플래그를 모두 생략 할 수 있습니다.

자세한 내용 man xargs은 참조하십시오 .


4

함수를 사용할 수도 있습니다.이 함수는 마지막에 변경 인수를 갖는 것으로 제한하지 않습니다.

runcom() { run-command --a --whole --lot --of --flags parameter "$1" ; }

runcom a
runcom b

2

이전 명령에서 대체를 수행 할 수 있습니다. 'a'의 모든 인스턴스가 'b'로 바뀌므로 {a, b} 예에서는 작동하지 않습니다. 그러나 다음 명령을 실행한다고 가정하십시오.

run-command --a --whole --lot --of --parameter --format xml
run-command --a --whole --lot --of --parameter --format son

당신은 그것을 할 수 있습니다

run-command --a --whole --lot --of --parameter --format xml
!!:s/xml/json/

Bash는 대체를 수행하고 실행합니다.

run-command --a --whole --lot --of --parameter --format json

gs (전역 대체)를 사용하여 하나만이 아니라 여러 개의 대체를 수행하십시오.


1

aliasbash 에는 다음과 같은 명령 이 있습니다 .

$ alias shotcommand='run-command --a --whole --lot --of --flags parameter'

사용법은 다음과 같습니다. $ shotcommand a


코드가 좀 더 복잡한 경우에도 함수가 있습니다 :-)
njsg

2
이 솔루션은 변경되는 매개 변수가 마지막 매개 변수 인 경우에만 작동합니다.
ashays

예. 네 말이 맞아
dchirikov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.