매개변수 목록에 댓글이 있나요?

매개변수 목록에 댓글이 있나요?

일부 명령(예: rsync)은 목록을 인수로 사용합니다. 이 파일에 유닉스 주석이 포함될 수 있습니까 #?

답변1

명령에 대한 문서에서 주석을 포함할 수 있다고 명시적으로 언급하지 않는 한 주석을 포함할 수 없는 것으로 간주됩니다.

답변2

이 경우 내가 일반적으로 하는 일은 매개변수 배열을 구축하고(주석을 받을 수 있음) 이를 rsync 등에 전달하는 것입니다.

#!/bin/bash
rsync_args=(
    # Show me what you're doing
    --itemize-changes
    # All HTML and resources
    *.html *.css *.js
    # All PHP source code
    *.php
    # To the live server
    live:
)
rsync "${rsync_args[@]}";

답변3

내가 올바르게 이해했다면 파일 목록에 파일에 대한 설명을 추가하고 싶습니다. 쉘이 # 문자를 발견하면 명령줄에 남아 있는 모든 문자를 무시하기 때문에 이는 불가능합니다. 이를 달성하는 한 가지 방법은 --files-from=filelist 매개변수와 함께 rsync를 사용하는 것입니다. 파일 목록 파일에는 설명이 포함될 수 있습니다.

반면에 파일 이름에 # 문자를 포함하려는 경우에는 이 방법이 작동합니다. 예를 들어 bash를 사용하면 다음과 같습니다.

touch a#b 
touch 'a #b' 
touch "a #b"

답변4

이그나시오 바스케스 아브람스# comments대답은 가장 안전하지만 정말로 그렇게 하고 싶다면(어떤 경우에는 그랬던 것처럼) 전체 라인을 차지하는 문제를 처리함으로써 적어도 부분적으로 간단한 해결 방법을 쉽게 얻을 수 있습니다.

실제 목록 데이터 줄 뒤에 있는 주석을 처리하려는 경우 데이터 줄에 포함된 #문자가 포함되어 있지 않은 것이 확실하지 않으면 상황이 조금 더 까다로워질 수 있습니다.

당신은 그것을 사용할 수 있습니다프로세스 교체그리고 간단한 도우미 스크립트.

여기 몇 가지 예가 있어요. 컬러 출력을 grc생성하기 전에 . 나는 bash 기능을 사용했지만 확실히 스크립트 파일에 저장할 수 있습니다.diff

# nocom handles comment-only lines (ie. no dat)
#       it ignores any # chars embedded in your data lines.
#
  nocom() { sed -e '/^[[:space:]]*#/d' "$1"; }

# NOCOM handles handles comments which occurr after your data   
#       as well as comment-only lines.  
#       Do not use NOCM unless you are CERTAIN that your data
#       lines contain no  # chars.
#
  NOCOM() { sed -n '/^[[:space:]]*#/d; s/^\([^#][^#]*[^[:space:]]\)[[:space:]]*#.*/\1/; p' "$1"; }

printf '# a bit of hokus-pokus
        # you see the coments here, 
        # but the calling program will not.
$HOME/bin/abra
$HOME/bin/kadabra  # comment after data
$HOME/bin/sim# another comment after data
' >file

echo == nocom ==
cat <(nocom "file")
echo == NOCOM ==
cat <(NOCOM "file")
echo == diff ==
grc diff "file" <(NOCOM "file")

출력은 다음과 같습니다.

== nocom ==
$HOME/bin/abra
$HOME/bin/kadabra  # comment after data
$HOME/bin/sim# another comment after data
== NOCOM ==
$HOME/bin/abra
$HOME/bin/kadabra
$HOME/bin/sim
== diff ==
1,3d0
< # a bit of hokus-pokus
<         # you see the coments here, 
<         # but the calling program won't.
5,6c2,3
< $HOME/bin/kadabra  # comment after data
< $HOME/bin/sim# another comment after data
---
> $HOME/bin/kadabra
> $HOME/bin/sim

관련 정보