Только что попробовал сам:Нужен только пакет lxqt-core
! Этот пакет уже предоставляет необходимые зависимости, такие как диспетчер отображения, оконный менеджер, файловый менеджер(pcmanfm-qt
)и панель.
Кроме того, рекомендуется также установить lxqt-qtplugin
, иначе значки символов не будут работать должным образом...
Возможно, вы захотите использовать этот синтаксис, просто заключите программу ruby в одинарные кавычки:
#!/bin/sh -
foo() {
ruby -e '
3.times do
puts "Ruby is getting the argument #{ARGV[0]}"
end
' -- "$@"
}
foo test-arg
Аналогично python -c 'command'
, или awk ''
, или sh -c 'command'
и т. д. Далее следуют аргументы. Внутри кавычек вы можете написать многострочный текст со своим кодом.(--
важно для определения конца опций, например. для случая следующий аргумент начинается с -
, см. также этот ответ)
На самом деле это оболочка для команды ruby, вы можете использовать оболочка для фильтрации ввода, обработки вывода, вызова дополнительных программ и т. д. Также здесь вы можете увидеть больше о ссылке на аргументы, я заменил на "$@"
для ссылки на все аргументы, передаваемые из сценария оболочки для команды ruby вы также можете использовать $1
, $2
и т. д.
Конечно, следует обратить внимание на одинарные кавычки. Если можете, избегайте их. Вероятно, существует несколько способов их использования, например \047
или интерполяция \'
между двумя строками в одинарных кавычках. Пример:
$ ruby -e 'puts "Ruby\047s #{ARGV[0]}"' great
Ruby's great
$ ruby -e 'puts "Ruby'\''s #{ARGV[0]}"' great
Ruby's great
Здесь еще немного о цитировании.
В системах с /dev/fd/n
всегда можно выполнить:
foo() {
ruby /dev/fd/3 "$@" 3<< 'EOF'
3.times do
puts "Ruby is getting the argument #{ARGV[0]}"
end
EOF
}
Здесь используется fd выше 2, поэтому ваш ruby
скрипт может по-прежнему использовать stdin/stdout/stderr без изменений.
Если ваша система одна из немногих, которые до сих пор не поддерживают /dev/fd/n
, вы можете сделать:
foo() {
ruby - "$@" << 'EOF'
3.times do
puts "Ruby is getting the argument #{ARGV[0]}"
end
EOF
}
(где ruby
сам интерпретирует -
как значение stdin).
Но это означает, что стандартный ввод ruby
встроенного скрипта теперь является heredoc, так что скрипт не сможет запрашивать пользователя через исходный стандартный ввод, если вы не предоставите этот поток другим способом.
Heredoc — это функция, появившаяся в оболочке Bourne в конце 70-х годов. Это оператор перенаправления, он означает перенаправление некоторого файлового дескриптора (0
, также известного как стандартный ввод по умолчанию ), на некоторый фиксированный контент. Первоначально это было реализовано через временный файл, хотя некоторые оболочки, включая bash5.1+, вместо этого иногда используют каналы ().
Также обратите внимание, что в ruby -e code -- arbitrary-argument
, как и в sed -e code
или perl -e code
, но в отличие от sh -c code
, python -c code
, вам нужно --
, чтобы пометить конец опций, как если бы arbitrary-argument
начинается с -
, это будет рассматриваться как вариант ruby
.
Он нам не нужен ни в ruby /dev/fd/3 arbitrary-argument
, ни в ruby - arbitrary-argument
, так как параметры не ожидаются после аргумента параметра, отличного от -, то есть -
или /dev/fd/3
.
Параметр " -" указывает на "стандартный ввод".
foo() {
ruby - "$@" << 'EOF'
3.times do
puts "Ruby is getting the argument #{ARGV[0]}"
end
EOF
}
$ foo bar
Ruby is getting the argument bar
Ruby is getting the argument bar
Ruby is getting the argument bar
$