유닉스 도구 : 파일의 이름을 빼면 어떨까요?


9

항상 궁금합니다 : 대부분의 GNU / Unix 도구는 "빼기"형식의 옵션을 취하며 때로는 인수가 따릅니다. 빼기 이름을 가진 파일이 있으면 어떻게합니까?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

또는

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

이것은 단지 호기심에서 벗어난 것입니다. 이에 대한 유스 케이스가 없습니다.


문자 그대로 "-f"문자열을 시스템 호출에 전달하는 방법을 찾아야합니다. 일반적으로 조심스럽게 탈출하는 것입니다.
Flexo

2
주제를 벗어난 유권자 유권자에게 : 이것은 쉘 프로그래밍 과 문제를 피하는 방법에 관한 질문 입니다. SO에 대한 주제입니다. (OTOH, 아마 중복, 문제가 관련된 다른 질문을 찾는 것입니다.)
조나단 레플러

답변:


12

라는 이름의 파일을 제거하려면 -x, 사용 rm -- -x( --수단 옵션의 끝) 또는 rm ./-x.


10

인터뷰 설정에서 이러한 유형의 질문을하는 것이 일반적입니다. 대시가있는 파일을 처리하는 일반적인 방법은 다음 중 하나입니다.

$ rm -- -f
$ rm ./-f

6

유닉스의 일반적인 질문입니다. 주요 방법은 파일의 전체 경로 이름을 지정하는 것이므로 파일 앞에 대시가 없습니다.

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

일부 명령의 경우 대시 자체 (또는 이중 대시)를 사용하여 옵션을 종료 할 수 있습니다. 그러나 이것은 모든 명령 또는 다른 시스템의 동일한 명령 일 경우에도 반드시 해당되는 것은 아닙니다.

$ rm -- -file.txt   #Works on Linux but not on some Unix systems

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