Почему некоторые функции пользователя не распознаются bash?

Я не думаю, что dsfg - это «опечатка», я думаю, что это больше относится к ACRONYM для бесплатных руководств Debian (DFSG). Только мои два цента.

4
задан 4 June 2012 в 04:32

24 ответа

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который вы хотите выполнить, используйте встроенный eval.

my_snippet='myfunction .'
eval "$my_snippet"

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

[d4 ] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

6
ответ дан 25 May 2018 в 10:38

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который eval

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

7
ответ дан 25 July 2018 в 18:39

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который eval

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

7
ответ дан 2 August 2018 в 00:48

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который eval

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

7
ответ дан 4 August 2018 в 16:19

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который eval

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

7
ответ дан 6 August 2018 в 00:57

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который eval

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

7
ответ дан 7 August 2018 в 18:23

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который eval

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

7
ответ дан 10 August 2018 в 07:07

Определение функции влияет только на текущий экземпляр bash. Когда вы пишете

echo "myfunction ." | bash

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

Если у вас есть строка, содержащая имя функции и аргументы (если это необходимо), или, в более общем смысле, любую строку, содержащую исходный код оболочки, который eval

Если вы определяете функции в своем .bashrc, они доступны только в интерактивных оболочках, а не в скриптах.

] Команда . (почти) эквивалентна source и не имеет ничего общего с ., что означает текущий каталог.

7
ответ дан 15 August 2018 в 19:05

Вместо использования eval вы можете export выполнить свою функцию, чтобы она была унаследована подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

. [ ! d2]

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 25 May 2018 в 10:38

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 25 May 2018 в 10:38
  • 1
    Команда, подобная echo "myfunction ." | bash, не передает myfunction . в bash в качестве аргумента командной строки. Он запускает bash и piping это текст myfunction . вместо стандартного ввода . Это совершенно другое дело. – Eliah Kagan 4 June 2012 в 05:30
  • 2
    Вы совершенно правы. Спасибо за напоминание. – pconley 4 June 2012 в 09:41

Вместо использования eval вы можете export выполнить свою функцию, чтобы она наследовалась подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

.

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 25 July 2018 в 18:39

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 25 July 2018 в 18:39

Вместо использования eval вы можете export выполнить свою функцию, чтобы она наследовалась подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

.

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 2 August 2018 в 00:48

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 2 August 2018 в 00:48

Вместо использования eval вы можете export выполнить свою функцию, чтобы она наследовалась подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

.

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 4 August 2018 в 16:19

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 4 August 2018 в 16:19

Вместо использования eval вы можете export выполнить свою функцию, чтобы она наследовалась подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

.

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 6 August 2018 в 00:57

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 6 August 2018 в 00:57

Вместо использования eval вы можете export выполнить свою функцию, чтобы она наследовалась подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

.

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 7 August 2018 в 18:23

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 7 August 2018 в 18:23

Вместо использования eval вы можете export выполнить свою функцию, чтобы она наследовалась подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

.

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 10 August 2018 в 07:07

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 10 August 2018 в 07:07

Вместо использования eval вы можете export выполнить свою функцию, чтобы она наследовалась подоболочками:

myfunction () { ls -R "$1" ; }
export -f myfunction

И тогда работает

echo "myfunction ." | bash

.

echo "myfunction ." | sh, вероятно, не будет, если ваш / bin / sh не является символической ссылкой на bash.

8
ответ дан 15 August 2018 в 19:05

bash и sh ожидают, что их аргумент будет исполняемым файлом, а не строкой.

Вы можете выполнить содержимое строки с помощью

eval "myfunction ."

Когда вы запускаете программу через оболочку, она обычно вызывает новый экземпляр bash (или sh, csh, zsh и т. д., если это необходимо), наследует все исходные настройки оболочки и запускается в новая оболочка. Это позволяет временно устанавливать переменные или изменять настройки без вмешательства в вашу среду.

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

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

1
ответ дан 15 August 2018 в 19:05
  • 1
    Команда, подобная echo "myfunction ." | bash, не передает myfunction . в bash в качестве аргумента командной строки. Он запускает bash и pipeing текст myfunction . вместо стандартного ввода . Это совершенно другое дело. – Eliah Kagan 4 June 2012 в 05:30
  • 2
    Вы совершенно правы. Спасибо за напоминание. – pconley 4 June 2012 в 09:41

Другие вопросы по тегам:

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