일부 명령(예: 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