Почему делает передачу HEREDOC, поскольку строка к 'рубину-e' не работает?

Можно попытаться следовать этой статье

Способностью является Ncurses, базирующийся FrontEnd в Кв., debian диспетчер пакетов.

Tasksel является инструментом, который устанавливает несколько связанных пакетов как скоординированную “задачу” на Вашу систему.

# apt-get install aptitude tasksel

Установите гнома на debian

# tasksel install gnome-desktop --new-install

2
16.07.2014, 06:36
3 ответа
[

] Это потому, что создание гигантской строки и передача ее в качестве аргумента - это не то, что делают "здесь документы". Они создают поток, который может быть связан с вводом некоторого задания.[

] [

]Конкретно,[

] [
cat <<!
foo
!
] [

]не эквивалентен[

] [
cat foo
] [

].[

] [

]Говоря о []cat[], это может нам помочь. Внимание: []не[] бесполезно использовать []cat[] следующим образом![

] [
echo $(cat <<!
foo
!
)
] [

]Смотрите, мы []можем [] передать здесь документ в качестве аргумента, благодаря замене команды, примененной к []cat[], которая была подана сюда документом.[

].
5
27.01.2020, 21:52
[

]Попробуйте следующее:[

] [
$ perl -e "$(cat <<'EOF'
print 'qwerty';
EOF
)"
qwerty
] [

]Вы должны использовать двойную кавычку для []perl[], чтобы знать, какую программу запускать, и []bash[], чтобы расширить этот документ. [

] [
$ perl -MO=Deparse -e "<<'EOF'
print 'qwerty';
EOF
"
'???';
-e syntax OK
] [

] Вы можете видеть, что []perl[] воспринимает ваш ввод только как строку. [

] [

] С помощью []cat[] и [] подстановки процесса []:[

] [
$ perl -MO=Deparse -e "$(cat <<'EOF'
print 'qwerty';
EOF
)
"
print 'qwerty';
-e syntax OK
]
1
27.01.2020, 21:52

-e требует аргумента, кода для выполнения. Вы можете использовать строку со встроенными символами новой строки. Для меня это наиболее читаемый. Работает с ruby, perl, sed ...

ruby -e '
  1.upto(10) do |n|
    p [n, n.even?]
  end
'

Вы можете передать код ruby ​​/ perl интерпретатору через stdin, но тогда вы не сможете передавать какие-либо аргументы имени файла или читать данные из stdin (*)

ruby <<'END'
  1.upto(10) do |n|
    p [n, n.even?]
  end
END

(*) это довольно грубо: вы можете отправить программе и данные на стандартный ввод, используя файловый дескриптор DATA в ruby ​​(и perl):

{
    cat <<'END'
while (<DATA>) {print +(split /:/)[0], "\n"}
__END__
END
    cat /etc/passwd
} | perl
1
27.01.2020, 21:52

Теги

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