리눅스에서 명령 옵션의 순서는 중요합니까?


14

예를 들어, 내가 입력했을 때 :

gcc -O hello.c -c

또는

gcc hello.c -c -O

둘 다 불평하지 않았다.

명령 옵션의 순서가 중요합니까?

답변:


18

이것은 프로그램 자체에 달려 있습니다. 운영 체제는 주문이 중요한지 여부를 지시하지 않습니다.

GCC의 옵션 세트는 너무 거 대해서 임의의 순서로 옵션을 제공 할 수 있다면 권한을 가지고 말할 수 없습니다 . 해당 옵션에 대한 설명서를 읽어야합니다. 그러나 일반적으로 경험에 따라 두 개 이상의 상호 배타적 인 옵션이있는 경우 (예 : -O1 -O2최적화 수준이 다른 경우) 프로그램은 일반적으로 이전 옵션보다 나중에 옵션을 사용합니다. 다시, 이것은 리눅스에 의해 시행되지 않습니다.

어떤 순서로든 대부분의 옵션을 지정할 수있는 간단한 프로그램은 다음과 같습니다 ls. 세부 현재 디렉토리에있는 모든 파일을 나열하는 중 수행 할 수 있습니다 ls -la, ls -al또는 ls -l -a. 그러나 ls -l1 (즉 'el' 'one')은 ls -1l ( 'one' 'l')과 동일한 출력을 제공하지 않습니다. 이들은 상호 배타적 인 옵션이며, 마지막에 나열된 것은 첫 번째로 제공됩니다.

인수가 도착하면 옵션을 옵션으로 적용하는 홀수 프로그램도 있습니다. 따라서 예를 들어, 당신은 가상의 명령이있을 수 있습니다 세 가지 인수에 적용,하지만 에만 적용됩니다 .blah -a 1 2 -b 3-a-b3

다시 말하지만 이것은 문제의 개별 프로그램에 달려 있습니다. 확실하지 않은 경우 설명서를 읽으십시오.


5

GCC에서도 명령 행 옵션의 순서가 중요한 경우가 있습니다. 정적 라이브러리 (.a)와 링크하는 경우 프로그램에 지정 되지 않은 함수를 호출하는 함수 -llib1 -llib2가 지정 되어 있으면 해석되지 않은 기호로 링크가 실패합니다. 공유 라이브러리에서는 이것이 문제가되지 않습니다.liblib2.aliblib1.a

일반적으로 다른 사람들이 말했듯이 옵션의 순서는 차이를 만들거나 만들지 않을 수 있습니다. 그러나 아래 두 명령의 출력이 다르므로 인수 순서에 cat따라 출력 이 변경됩니다.

cat /etc/passwd /etc/group
cat /etc/group  /etc/passwd

Linux에서 (특히) GNU getopt()는 명령 행의 순서를 변경하여 모든 옵션 (마이너스로 시작)이 다른 인수보다 먼저 처리되도록합니다. 이중 대시 --를 사용 하여 환경 변수 POSIXLY_CORRECT를 설정하지 않은 경우.


4

상호 배타적 인 두 가지 옵션이있는 경우에만 가능합니다. 그렇지 않으면 순서는 중요하지 않습니다.

물론 이것은 프로그램 작성 방법에 따라 다를 수 있지만 모든 일반 * nix 도구에 적용되어야합니다.


3

다른 사람들이 이미 말했듯이 차이를 만들거나하지 않을 수 있습니다.

경험상 가장 좋은 방법은 맨 페이지를 열고 첫 번째 예제를보고 arg를 넣을 때 해당 순서를 사용하는 것입니다.

cat 명령 (man cat)을 보면 :

SYNOPSIS
       cat [OPTION] [FILE]...

모든 옵션이 파일 인수보다 앞서 있으면 괜찮을 것 같습니다.

그리고 우리가 gcc beast (man gcc)를 보면 :

SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] [@file] infile...

       Only the most useful options are listed here; see below for the remainder.  g++ accepts mostly
       the same options as gcc.

cat 명령으로 이해하는 것은 간단하지 않습니다 :)

그러나 안전하게 재생하려면 -c가 -O보다 먼저 나오고 infile (hello.c)이 마지막으로 보입니다.

gcc -c -O hello.c

그러나 이미 알고 있듯이 다른 사람들이 일하기 때문에 ...이 게임은 매우 안전합니다. :)


플래그를 연결하는 것은 -static-libstdc++어떻습니까?
Royi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.