Обновлено: Пересмотрен ответ, чтобы уточнить, что не для непакетных установок
Если вы установили с помощью ручной установки, которая была указана первой на youtube-dl github странице, то этот метод позволит вам использовать youtube-dl
с вашим пользовательским именем youtubedl
, не видя youtube-dl
в автозаполнении. На вашем терминале:
$ cd /usr/local/bin/
$ sudo mv youtube-dl youtubedl
Теперь вы можете использовать его, используя новое имя youtubedl
, попробуйте его с тестовым видео:
$ youtubedl -F 'https://www.youtube.com/watch?v=BaW_jenozKc'
Вы также можете обновить его в будущем:
$ youtubedl -U
2016.01.15
, переименование и последующее обновление до 2016.04.05
. См. youtube-dl --version
Инструкции youtube-dl github page были следующими:
$ sudo curl https://yt-dl.org/latest/youtube-dl -o /usr/local/bin/youtube-dl
$ sudo chmod a+rx /usr/local/bin/youtube-dl
youtube-dl
двоичный файл в /usr/local/bin
. $PATH
появляются при автозаполнении. /usr/local/bin
действительно является одним из таких путей в $PATH
, поэтому youtube-dl
появится в автозаполнении Bash. Итак, чтобы переименовать то, что появляется в автозаполнении Bash, один из способов - переименовать сам двоичный файл. Заходим в расположение бинарного файла:
$ cd /usr/local/bin/
Rename:
$ sudo mv youtube-dl youtubedl
/usr/local/bin
- это ограниченный каталог, поэтому мы используем sudo
Старое имя больше не будет найдено:
$ which youtube-dl
youtube-dl not found
И теперь мы можем обращаться к нему по новому имени:
$ which youtubedl
/usr/local/bin/youtubedl
Мы можем проверить, что он все еще работает, например, обновить его с помощью -U
:
$ youtubedl -U
Updating to version 2016.04.05 ...
Updated youtube-dl. Restart youtube-dl to use the new version.
Протестировать его функциональность видео, например, извлечение форматов:
$ youtubedl -F 'https://www.youtube.com/watch?v=BaW_jenozKc' | head
[youtube] BaW_jenozKc: Downloading webpage
[youtube] BaW_jenozKc: Downloading video info webpage
[youtube] BaW_jenozKc: Extracting video information
[youtube] BaW_jenozKc: Downloading MPD manifest
[info] Available formats for BaW_jenozKc:
format code extension resolution note
249 webm audio only DASH audio 47k , opus @ 50k, 57.05KiB
250 webm audio only DASH audio 66k , opus @ 70k, 79.56KiB
171 webm audio only DASH audio 74k , vorbis@128k (44100Hz), 89.59K
iB
140 m4a audio only DASH audio 127k , m4a_dash container, mp4a.40.2
@128k (44100Hz), 154.06KiB
Из исходного кода update. py
, строка 86:
filename = sys.argv[0]
yourcustomname -U
и все равно успешно обновляться. Я не знаю ни одной программы, которая принимает параметр и отправляет его по TCP-соединению.
Однако вы как бы ответили на свой вопрос в своих комментариях, в частности, в следующей строке.
ENTRYPOINT ["/bin/sh", "-c", "mycommand"]
Я понимаю, что вы, похоже, хотите, чтобы в вашем образе было минимальное количество приложений, но я считаю, что лучшим решением будет иметь shell
и netcat
., а затем использовать исходную команду. Ну, по крайней мере, чтобы проверить, что вы пытаетесь сделать.
Если в конце дня вы захотите вернуться только к одному исполняемому файлу, вам придется написать для этого собственную программу.
Одна мысль, я вижу этот пример ,показывает настройку Python для запуска скрипта,
FROM python:2.7-slim AS build-env
ADD. /app
WORKDIR /app
FROM gcr.io/distroless/python2.7
COPY --from=build-env /app /app
WORKDIR /app
CMD ["hello.py", "/etc"]
что может быть проще/быстрее, чем разработка C
программы для всего этого, но тогда фактически вы используете Python как SHELL . Наконец, если вы думаете, что socat
будет делать то, что вы хотите, не могли бы вы использовать socat
для чтения из файла (, который вы включаете в свой образ ), и этот файл содержит литеральную строку.
Я написал собственное небольшое приложение для реализации того, что мне нужно. Читает аргументы и записывает их в сокет. Жаль, что его еще не было, но в таких инструментах, как nc
и socat
, доступны только более сложные функции. Возможно, я мог бы найти время, чтобы написать патч для nc
, чтобы также принимать входные данные от аргумента.
Комментарии к комментариям -Мне немного грустно читать, что включение полной оболочки и создание из нее подпроцессов является новой нормой. Чистые накладные расходы нам не нужны.
Думаю, вы могли бы использовать newlisp
, например
newlisp -e '(write-line (net-connect "localhost" 3456) "go for it")'
и измените параметры по желанию.
Я почти уверен, что вы могли бы использовать perl
или другие интерпретаторы, хотя newlisp
довольно мал, и его также можно скомпилировать в статическую программу.
В приведенном выше примере программа подключается к localhost
порту 3456
и выдает строку go for it
на сокете, после чего завершается. Перейдите на домашний сайт newlisp для более подробной информации.