Комментарии в списках аргументов?

Я думаю, что у Вас есть неправильное представление, что 'UNIX' является определенным продуктом, что можно выйти и купить. Сегодня, UNIX относится к нескольким семействам операционных систем.

3
13.10.2011, 19:09
4 ответа

Если документация для команды явно не упоминает, что может содержать комментарии, предположить, что она не может.

6
27.01.2020, 21:10
  • 1
    Согласиться. Обычно соответствующая страница справочника команды детализирует, можно ли добавить комментарии к файлу чтения, и раз так как это идентифицирует строку как комментарий. –  Shadur 13.10.2011, 12:58

То, что я обычно делаю в случаях как это, является сборкой массив arguments (который может взять комментарии), и затем передайте тех, которые 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
27.01.2020, 21:10

Если я понимаю Вас правильно, Вы хотите добавить комментарии о файлах в списке файлов. Это не возможно, потому что, когда оболочка встречается с # символом, она проигнорирует весь оставшийся символ на командной строке. Один способ достигнуть этого состоит в том, чтобы использовать rsync с - files-from=filelist аргумент. Файл списка файлов может содержать комментарии.

С другой стороны, если Вы захотите встроить # символы в имя файла, то затем это будет работать. Например, с ударом:

touch a#b 
touch 'a #b' 
touch "a #b"
0
27.01.2020, 21:10
  • 1
    Посмотрите, например, --include-from аргумент rsync. –  Ignacio Vazquez-Abrams 13.10.2011, 15:12

Ответ Ignacio Vazquez-Abrams является самым безопасным, но если Вы действительно хотите сделать это (как я делаю в некоторых случаях), простое обходное решение может легко добраться по крайней мере отчасти там путем контакта с # comments которые поднимают всю строку.

Вещи могут стать немного непростыми, если Вы хотите обработать комментарии, которые следуют за реальными линиями передачи данных списка, если Вы не уверены, что Ваши линии передачи данных содержат не встроенный # символы.

Можно использовать замену процесса и простой сценарий помощника.

Вот некоторые примеры. grc прежде 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
0
27.01.2020, 21:10

Теги

Похожие вопросы