Выполнение исполняемого файла в ПУТИ с тем же именем как существующая функция

sftp, как cp и scp, требует, чтобы при копировании папки (и ее содержание, очевидно), Вы явно сказали ей, что хотите передать папку рекурсивно с -r опция.

Так, добавьте -r к команде.

16
21.01.2013, 16:20
3 ответа

Используйте command встроенная оболочка:

bash-4.2$ function date() { echo 'at the end of days...'; }

bash-4.2$ date
at the end of days...

bash-4.2$ command date
Mon Jan 21 16:24:33 EET 2013

bash-4.2$ help command
command: command [-pVv] command [arg ...]
    Execute a simple command or display information about commands.

    Runs COMMAND with ARGS suppressing  shell function lookup, or display
    information about the specified COMMANDs.  Can be used to invoke commands
    on disk when a function with the same name exists.
19
27.01.2020, 19:48
  • 1
    Еще один опции должен выйти из команды \date. –  jordanm 21.01.2013, 17:47
  • 2
    @jordanm, который работает только на псевдонимы. Вопрос был о функциях. pastebin.com/TgkHQwbb –  manatwork 21.01.2013, 17:54

В сценариях, #! строка часто использует /bin/env bash выполнять команду удара на основе пути. (Это могло бы отличаться для некоторых утилит). Это должно работать здесь также...

( command альтернатива должна также работать, но могла бы быть иждивенцем на определенной оболочке) (Она работает над Оболочкой Bourne на Солярисе, но она на самом деле работает /bin/command в этом случае, который это - оболочка, встроенная на Bash),

Оба /bin/command и /bin/env перечислен в SUS, таким образом, все совместимые реализации должны иметь его.

3
27.01.2020, 19:48
  • 1
    Спасибо за указание env. Я был в сомнениях, которые ответ должен я принимать, но так как вопрос об ударе, его встроенном command лучшее решение. –  Petr Pudlák 21.01.2013, 17:43
  • 2
    На моем Linux там нет command исполняемый файл, но command также работы в dash, ksh и zsh. Таким образом, я предполагаю, что это - оболочка, встроенная не только в bash. pastebin.com/fi3gyNse –  manatwork 21.01.2013, 18:08
  • 3
    Это не здание на Солярисе 10 Bourne (Который также доступен как семейная-реликвия-sh). Преимущества исполняемого файла с известным путем состоят в том, что он не может быть перезаписан функцией. –  Gert van den Berg 22.01.2013, 09:25
  • 4
    (Отсутствие/bin/command могло бы объяснить, почему сценарии используют /bin/env после удара хеша, если они не хотят к твердому коду путь оболочки) –  Gert van den Berg 24.01.2013, 14:17

Ответ Gert заставил меня понять, что можно использовать nice для цели также (у меня на самом деле был он в одном из моих сценариев, не понимая его):

$ function date() { echo 'at the end of days...'; }
$ date
at the end of days...
$ nice -n0 date
Mon Jan 21 16:45:21 CET 2013

Это менее изящно, чем другие ответы, но при некоторых обстоятельствах это могла быть полезная опция.

3
27.01.2020, 19:48
  • 1
    Можно хотеть развернуть это для включения подобной альтернативы: `which date`. –  Eliah Kagan 22.01.2013, 05:10
  • 2
    @EliahKagan проблема с `which something` это, если существует нет something исполняемый файл, неудачные вещи могут произойти. Например, если echo отсутствует затем `which echo` /bin/rm preciousFile делает что-то совсем другое, чем предназначенный. –  Petr Pudlák 22.01.2013, 10:39

Теги

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