создавать исполняемые файлы по трубопроводам

Используя каналы, можно создавать файлы с помощью простых встроенных оболочек.

{ echo "#!/bin/bash" \ echo "echo Hello, World!" \ } > helloworld.sh 

С помощью chmod они могут быть выполнены исполняемыми.

 $ chmod 755 helloworld.sh $ ./helloworld.sh Hello, World! 

Интересно, можно ли сохранить шаг chmod . Уже, я обнаружил, что umask не может выполнить эту работу . Но, возможно, кто-то знает переменную окружения, трюк bash, программу для прохода через или другой аккуратный способ сделать это.

Возможно ли, чтобы файл был создан с уже установленным битом исполняемого файла?

  • Может ли сценарий быть исполняемым, но не читаемым?
  • причина добавления разрешений на выполнение сценария оболочки
  • 2 Solutions collect form web for “создавать исполняемые файлы по трубопроводам”

    Невозможно создать исполняемый файл исключительно с оператором перенаправления оболочки. Нет никакого портативного способа, и в bash нет никакого способа (в исходном коде вы можете видеть, что перенаправления звонят do_redirection_internal который вызывает redir_open с параметром mode установленным на 0666, и это, в свою очередь, open этот режим с этим режимом).

    Вы все равно вызываете команду оболочки, поэтому добавьте ; chmod +x … ; chmod +x … где-то в нем. В этом нет ничего плохого. Еще одна строка кода не проблема. Вам нужно сделать три вещи (создать файл с определенным содержимым, сделать исполняемый файл, выполнить его), так что напишите три строки.

    Существует относительно неясная командная оболочка, которая может создавать исполняемый файл с определенным содержанием: uudecode . Но я бы не рекомендовал его использовать: он требует, чтобы вход был передан в нечитаемом формате, он обходит пользовательский umask, и он неясен.

    Разумной альтернативой является вызов bash /the/script вместо chmod +x /the/script && chmod +x , если вы знаете, с каким интерпретатором должен выполняться файл.

    Функция для создания исполняемого сценария оболочки из входного потока:

     pipe2script() { touch "$1" ; chmod +x "$1" ; \ echo '#!'"$(which ${2:-bash})" > "$1" ; cat >> "$1" ; } 

    Используйте pipe2script для соединения двух строк текста с foo.sh :

     printf 'echo hello world\necho bye\n' | pipe2script foo.sh 

    Это выводит новый исполняемый файл, foo.sh :

     $ ls -log foo.sh -rwxrwxr-x 1 38 Mar 18 09:05 foo.sh 

    Запуск cat foo.sh показывает:

     #!/bin/bash echo hello world echo bye 

    Запустить его:

     ./foo.sh 

    Вывод:

     hello world bye 

    Функция pipe2script умолчанию использует bash , но может принимать второй аргумент любого другого имени оболочки, то есть dash , zsh , ksh93 , python и т. Д. Пример использования math команды оболочки fish :

     printf 'math "99^33"\n' | pipe2script foo.fish fish 

    Запуск cat foo.fish показывает:

     #!/usr/bin/fish math "99^33" 

    Вывод ./foo.fish :

     717730532598275105894510914059816191752829524684539601273450723299 

    Редактируйте копию скрипта:

     sed '2,${s/.*/echo & | jethro/e;s/ / "/;s/$/"/}' foo.sh | pipe2script foojc.sh 

    Вывод при запуске:

     $ ./foojc.sh howdy world y'all come back now, heah? 
    Interesting Posts

    Что такое осиротевший инод?

    Как заставить конфликт зависимости для контрольных показателей?

    Debian Squeeze: нажатие левой кнопки мыши перестает работать

    Как я могу сделать автоматический клик для сервера Centos?

    Возможно ли синхронизация с Linux и Azure AD?

    как перенести систему squashfs в другую файловую систему, которая читает / записывает

    Почему GnuPG 2 и gpg-connect-agent не работают с «ERR 67108983 No SmartCard daemon»?

    Доступное консольное решение для физической машины под управлением OpenBSD?

    Аутентификация отказалась: плохое владение или режимы для файла /var/git/.ssh/authorized_keys

    ip forwarding для удаленного подключения к сокету, который прослушивает только локальный хост?

    нереста нескольких фоновых процессов

    Как правильно настроить анонимную NFS

    Выполните вывод скрипта, который извлекает данные из CSV

    Сделать X11 на «dev / input / eventx»?

    Не удалось установить рейд на моем NAS, пытаясь спасти данные, как мне следует продолжить?

    Linux и Unix - лучшая ОС в мире.