Я создал сценарий оболочки /usr/local/bin/suspend со следующим содержимым:
#! /bin/sh
# Take an optional delay parameter
if [ "$#" -gt "0" ]; then
sleep "$1"
fi
# Put the system to sleep
dbus-send --system --print-reply --dest="org.freedesktop.Hal" \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Suspend \
int32:0
Если я chmod +x и запустил сценарий, вызвав его напрямую (например, просто набрав suspend или /usr/local/bin/suspend в командной строке), ничего не происходит и оболочка висит & mdash; она даже не реагирует на Ctrl-C; Мне нужно переключиться на новую оболочку и убить процесс bash (у которого нет видимых детей).
Сценарий отлично работает, если я вызываю его любым из следующих способов:
Используя sh /usr/local/bin/suspend. Используя . /usr/local/bin/suspend. Переименовать его в suspend.sh и вызвать /usr/local/bin/suspend.sh (или просто suspend.sh, так как он находится в PATH).Последний вариант в порядке, но все же я задаюсь вопросом: что именно не так, если вы не используете расширение .sh?
suspend является встроенным bash,
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы [ f4] он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывшего перед последним.
suspend является встроенным bash,
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывшего перед последним.
suspend является встроенным bash,
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывшего перед последним.
suspend является встроенным bash,
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывшего перед последним.
suspend является встроенным bash,
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывшего перед последним.
suspend является встроенным bash,
suspend: suspend [-f]
Suspend shell execution.
Suspend the execution of this shell until it receives a SIGCONT signal.
Unless forced, login shells cannot be suspended.
Options:
-f force the suspend, even if the shell is a login shell
Exit Status:
Returns success unless job control is not enabled or an error occurs.
и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывшего перед последним.
suspend
является встроенным bash,
suspend: suspend [-f] Приостановить выполнение оболочки. Приостановить выполнение этой оболочки до получения сигнала SIGCONT. Если принудительные, блокировки входа не могут быть приостановлены. Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.
и как встроенные имеют приоритет, просто набрав suspend
будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT
он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывших до последнего.
suspend
является встроенным bash,
suspend: suspend [-f] Приостановить выполнение оболочки. Приостановить выполнение этой оболочки до получения сигнала SIGCONT. Если принудительные, блокировки входа не могут быть приостановлены. Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.
и как встроенные имеют приоритет, просто набрав suspend
будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT
он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывших до последнего.
suspend
является встроенным bash,
suspend: suspend [-f] Приостановить выполнение оболочки. Приостановить выполнение этой оболочки до получения сигнала SIGCONT. Если принудительные, блокировки входа не могут быть приостановлены. Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.
и как встроенные имеют приоритет, просто набрав suspend
будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT
он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывших до последнего.
suspend
является встроенным bash,
suspend: suspend [-f] Приостановить выполнение оболочки. Приостановить выполнение этой оболочки до получения сигнала SIGCONT. Если принудительные, блокировки входа не могут быть приостановлены. Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.
и как встроенные имеют приоритет, просто набрав suspend
будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT
он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывших до последнего.
suspend
является встроенным bash,
suspend: suspend [-f] Приостановить выполнение оболочки. Приостановить выполнение этой оболочки до получения сигнала SIGCONT. Если принудительные, блокировки входа не могут быть приостановлены. Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.
и как встроенные имеют приоритет, просто набрав suspend
будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT
он, он возобновляется).
То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в оболочке. Я бы заподозрил бывших до последнего.
, которые приостанавливают
и man suspend
, ничего не возвращают. Первое не удивительно, потому что , который
не обрабатывает встроенные функции, но последнее раздражает.
– Chris Conway
13 December 2010 в 17:12
, который
является бесполезной командой. Вместо этого используйте встроенный тип
. Попробуйте, тип suspend
, type -a suspend
и type -P suspend
. help
, чтобы узнать больше. Но на самом деле, просто не назовите свои скрипты с именем встроенной оболочки.
– geirha
22 January 2011 в 21:44
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:
enable -n suspend
Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный
enable suspend
. Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем.
Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.Из #bash на Freenode.net
Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:
enable -n suspend
Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный
enable suspend
. Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем.
Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:
enable -n suspend
Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный
enable suspend
. Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем.
Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:
enable -n suspend
Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный
enable suspend
. Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем.
Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:
enable -n suspend
Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный
enable suspend
. Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем.
Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:
enable -n suspend
Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный
enable suspend
. Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем.
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:
enable -n suspend
Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный
enable suspend
Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]
Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.
blockquote>Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:
enable -n suspend
Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный
enable suspend
Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]
Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.
blockquote>Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:
enable -n suspend
Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный
enable suspend
Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]
Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.
blockquote>Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:
enable -n suspend
Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный
enable suspend
Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]