Комментирование строки, но не '#' (Вставить комментарий посреди)

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
SerW
Сообщения: 402
ОС: macOS& Fedora Workstation Latest

Комментирование строки, но не '#'

Сообщение SerW »

Как можно вставить комментарий отлично от #?
Спрашиваю с тем: чтобы коммент был посреди скрипта -- то есть чтобы после него скрипт можно было дописать.
Сергей Ш. » DragonSerW.RU
Спасибо сказали:
igor@igor
Сообщения: 482
ОС: Debian GNU/Linux, wheezy-amd64

Re: Комментирование строки, но не '#'

Сообщение igor@igor »

Так, Вы, и так скрипт допишите.
# - строка не будет обрабатываться, а все остальные строки будут.
Добавлено (11:19):

Код: Выделить всё

#!/bin/sh
sleep 6 && xterm&
#sleep 6 && xfce4-terminal
sleep 7 && gedit&
#sleep 4



Такой примитивный скрипт, но принципы можно применить и в более сложных.
Спасибо сказали:
Kopilov
Сообщения: 870
ОС: [K]Ubuntu, Debian

Re: Комментирование строки, но не '#'

Сообщение Kopilov »

SerW, ЯП уточнить изволите? Вероятно, имелся ввиду bash, но кто, кроме Вас, знает…
igor@igor, что-то мне подсказывает, что автор хочет блочный комментарий, чтобы дописывать скрипт на той же строчке, где этот комментарий заканчивается
Спасибо сказали:
Аватара пользователя
SerW
Сообщения: 402
ОС: macOS& Fedora Workstation Latest

Re: Комментирование строки, но не '#'

Сообщение SerW »

igor@igor
Kopilov
Да, ребят, я по поводу однострочных скриптов в командной строке -- это bash называется?
Сергей Ш. » DragonSerW.RU
Спасибо сказали:
igor@igor
Сообщения: 482
ОС: Debian GNU/Linux, wheezy-amd64

Re: Комментирование строки, но не '#'

Сообщение igor@igor »

SerW писал:
03.01.2021 11:31
Да, ребят, я по поводу однострочных скриптов в командной строке -- это bash называется?
Так bash - командная оболочка.
Спасибо сказали:
Kopilov
Сообщения: 870
ОС: [K]Ubuntu, Debian

Re: Комментирование строки, но не '#'

Сообщение Kopilov »

В общем случае, это будет POSIX Shell. В большинстве случаев (но не всегда) — Bash, как его самое популярное надмножество.
Блочных комментариев в чистом виде, насколько мне известно, нет ни там, ни там.
Для Bash (но не для переносимого POSIX Shell, так что в production open source использовать не стоит) нашёл такой workaround:
echo "123`#This is commented`456" — выводит 123456
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Комментирование строки, но не '#'

Сообщение Bizdelnick »

SerW писал:
03.01.2021 11:31
я по поводу однострочных скриптов в командной строке
А зачем в однострочнике комментарий? Однострочники пишут ради краткости. А для читаемости пишут нормальные многострочные скрипты.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SerW
Сообщения: 402
ОС: macOS& Fedora Workstation Latest

Re: Комментирование строки, но не '#'

Сообщение SerW »

Потому что он у меня очень длинный -- там ставится весь мой набор ПО.
Сергей Ш. » DragonSerW.RU
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Комментирование строки, но не '#'

Сообщение Bizdelnick »

Kopilov писал:
03.01.2021 11:42
Для Bash (но не для переносимого POSIX Shell, так что в production open source использовать не стоит) нашёл такой workaround:
echo "123`#This is commented`456" — выводит 123456
Да по идее, в любом POSIX-совместимом шелле должно работать. Хоть и извращение, конечно.
Добавлено (13:36):
SerW писал:
03.01.2021 13:31
он у меня очень длинный
А не надо писать длинные однострочники. И, в любом случае, зачем там комментарий? Для поиска по истории? Поиск будет работать и в том случае, когда комментарий в конце строки.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Kopilov
Сообщения: 870
ОС: [K]Ubuntu, Debian

Re: Комментирование строки, но не '#'

Сообщение Kopilov »

Bizdelnick писал:
03.01.2021 13:34
Да по идее, в любом POSIX-совместимом шелле должно работать. Хоть и извращение, конечно.
Вроде, когда-то обсуждалось, что использование кавычек для внедрения вывода — башизм. А с $() этот способ не работает.
Собственно, найдено тут: товарищ утверждает, что
According to Posix (Shell&Utilities, §2.6.3), "`echo a #`" is undefined (implying that it should not be used)
Добавлено (14:50):
Bizdelnick писал:
03.01.2021 13:34
А не надо писать длинные однострочники
SerW писал:
03.01.2021 13:31
там ставится весь мой набор ПО.
Как вариант, если этот набор ПО ставится в Docker — чтобы снизить количество слоёв, не вынося скрипт в отдельный файл. (Сужу по опыту коллег, которые с такими однострочниками боролись, в различных смыслах, в том числе в контексте службы ИБ заказчика, которая умудрялась найти что-то лишнее в образе)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Комментирование строки, но не '#'

Сообщение Bizdelnick »

Kopilov писал:
03.01.2021 14:45
Вроде, когда-то обсуждалось, что использование кавычек для внедрения вывода — башизм.
Ничего подобного. Оба варианта есть в стандарте, обратные кавычки даже более переносимы (например, только они поддерживались в jsh, не к ночи будь помянут).
Добавлено (15:06):
Kopilov писал:
03.01.2021 14:45
According to Posix (Shell&Utilities, §2.6.3), "`echo a #`" is undefined (implying that it should not be used)
Ну это, в принципе, так, но во всех шеллах, до которых я дотянулся, работает одинаково (кроме zsh, но он не претендует и на POSIX-совместимость).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 666
ОС: debian, fedora (i3-wm)

Re: Комментирование строки, но не '#'

Сообщение olecya »

Два раза прочла комментарии, но суть все равно не ясна. А вдруг угадаю или наведу на мысль:

Shell

echo $(: <<\SPRAVKA
> one
> two
> three
> SPRAVKA
> ) 123
123
А в многострочном скрипте использование heredoc с пустой командой еще проще
Добавлено (16:34):

Shell

echo $(: "комментарий") 123
123
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1971
ОС: Gentoo

Re: Комментирование строки, но не '#'

Сообщение ormorph »

Тогда уж сразу:

Shell

: comment ; echo Hello

Shell

for x in 1 2; do : this is a comment; echo ${x};done
В место двоеточия можно использовать true, но это будет путать.
Но все это как правило замедляет работу скрипта по сравнению с обычными комментариями ##.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 666
ОС: debian, fedora (i3-wm)

Re: Комментирование строки, но не '#'

Сообщение olecya »

ormorph писал(а):
03.01.2021 22:57
можно использовать true
false в некоторых вариантах подойдет, а вместо точки с запятой из верхнего примера можно использовать "или" "и"

Shell

: comment && echo hello

Shell

false comment || echo hello
Но все таки влияние подобный комментарий оказывает на программу. Вспоминается случай из оболочки zsh Когда одним приемом из переменной вырезается хвост и начало:

Shell

var=1,2,3,4
echo ${${var%,*}##*,}
3
Я даже не проверяла, сколько возможно подобных вложений.
В баше приходится делать следующее:

Shell

: ${var%,*} && echo ${_##*,}
Добавлено (23:29):
Ну да. Проверила оболочку zsh на трех вложениях. Работает: :)

Shell

var=1,2,3,4
echo ${var%,*}
1,2,3
echo ${${var%,*}#*,}
2,3
echo ${${${var%,*}#*,}%,*}
2
Добавлено (23:38):
Вот так на баше выглядит трехходовка:

Shell

: ${var%,*} && : ${_#*,} && echo ${_%,*}
2
Добавлено (23:41):
Можно даже перезаписать переменную:

Shell

: ${var%,*} && : ${_#*,} && var=${_%,*}
Извиняюсь, увлеклась...
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Комментирование строки, но не '#'

Сообщение s.xbatob »

По-моему, делать что-либо серьёзное на sh — мазохизм какой-то. Костыль на костыле :( Ещё и плохая совместимость
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Комментирование строки, но не '#'

Сообщение Bizdelnick »

ormorph писал(а):
03.01.2021 22:57
Тогда уж сразу:

Shell

: comment ; echo Hello
Это нельзя вставить в произвольное место строки, например, между аргументами команды.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Комментирование строки, но не '#'

Сообщение Bizdelnick »

s.xbatob писал:
04.01.2021 00:25
По-моему, делать что-либо серьёзное на sh — мазохизм какой-то. Костыль на костыле :( Ещё и плохая совместимость
Совместимость-то как раз лучше всего, если умеючи писать. В любом юниксе заработает, независимо от установленного софта.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1971
ОС: Gentoo

Re: Комментирование строки, но не '#'

Сообщение ormorph »

Bizdelnick писал:
04.01.2021 01:38
Это нельзя вставить в произвольное место строки, например, между аргументами команды.
Да как бы в курсе, но какой смысл ставить комментарий между аргументами команды, либо в аргументе команды. Разве только чтобы себя запутать.
Это из оперы - выстрели себе в ногу, хотя хозяин барин.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Комментирование строки, но не '#'

Сообщение Bizdelnick »

ormorph писал(а):
04.01.2021 03:46
Да как бы в курсе
ТС зато может быть не в курсе.
ormorph писал(а):
04.01.2021 03:46
какой смысл ставить комментарий между аргументами команды
Если это команда установки, то, например, чтобы пояснить, для чего какой пакет нужен. Но вообще ТСу лучше знать, зачем ему такие странные вещи понадобились. Если там несколько команд, то какой смысл утрамбовывать их в однострок?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SerW
Сообщения: 402
ОС: macOS& Fedora Workstation Latest

Re: Комментирование строки, но не '#'

Сообщение SerW »

Bizdelnick
Вот -- дабы не быть голословным -- список команд: https://serw.su/fedora.
Как видно, он до крайности обширен, и поэтому необходимы внутренние комментарии )
Сергей Ш. » DragonSerW.RU
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1971
ОС: Gentoo

Re: Комментирование строки, но не '#'

Сообщение ormorph »

SerW писал:
04.01.2021 15:46
Как видно, он до крайности обширен, и поэтому необходимы внутренние комментарии )
Эх, не понять мне ваших извращений ))
Почему нельзя было сделать все это скриптом, и запускать его уже через sudo, как результат, можно было избавиться от множества вызовов sudo.
Так же можно было сделать его с параметрами, для выбора типа установки(варианта), а описание сделать по параметру -help. Конечно тут будут проблемы с восприятием. Но вы же делали для себя, вам и расхлёбывать :yes3:
Спасибо сказали:
Аватара пользователя
SerW
Сообщения: 402
ОС: macOS& Fedora Workstation Latest

Re: Комментирование строки, но не '#'

Сообщение SerW »

Там множественный вызов sudo компенсируется вызовом

Shell

sudo -i
или
su -
перед исполнением скрипточка : ))
Сергей Ш. » DragonSerW.RU
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1971
ОС: Gentoo

Re: Комментирование строки, но не '#'

Сообщение ormorph »

Я вообще против хранения скриптов, которым нужен рут - в каталогах пользователя. Лучше всего их хранить в каталогах рута, что бы ни кто не подправил, а права на выполнение под рутом можно прописать в /etc/sudoers. Тогда совсем просто получается и можно даже прикрутить к нему какой нибудь гуй, например zenity или yad.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19369
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Комментирование строки, но не '#'

Сообщение Bizdelnick »

SerW писал:
04.01.2021 15:46
Вот -- дабы не быть голословным -- список команд: https://serw.su/fedora.
Что это? Вы с какого потолка эти команды брали?

Код: Выделить всё

dnf update --refresh -y
sudo -i
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm --nogpgcheck
В чём смысл этого всего?

Если речь об этом:
sudo dnf update -y && sudo dnf install aspell-ru ffmpeg gnome-disk-utility gnome-font-viewer gstreamer1-libav gpart gstreamer1-plugins-bad-freeworld gstreamer-ffmpeg gstreamer1-plugins-ugly gvfs gvfs-smb hunspell-ru hyphen-ru livecd-tools mythes-ru p7zip PackageKit-gstreamer-plugin libreoffice-langpack-ru python-mutagen sshfs simple-scan tree youtube-dl -y && sudo dnf install chromium firefox lshw-gui mozilla-ublock-origin mozplugger seahorse WoeUSB xsensors -y && sudo dnf install aisleriot gnome-chess midori pdfmod -y && sudo dnf install avidemux brasero evince fbreader filezilla gimp gnome-commander gnome-mahjongg goldendict gthumb inkscape nfoview telegram-desktop vlc -y && sudo dnf install deluge xonotic -y #&& sudo dnf install librecad openscad openshot scribus steam -y
то зачем Вам всё это пихать в однострок? Сколько комментариев ни вставляйте, читаемым это не станет. Либо напишите нормальный скрипт, либо (лучше) автоматизируйте установку специально предназначенным для этого инструментом (kickstart, ansible, …).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Комментирование строки, но не '#'

Сообщение s.xbatob »

Bizdelnick писал:
04.01.2021 01:41
Совместимость-то как раз лучше всего, если умеючи писать.
Ну, да, умеючи-то на всём зайдёт.
Только смотрю я на autotools — что-то это умение, которое нынче уже и не слишком востребовано, дорого даётся :(
Спасибо сказали: