Я создал сценарий оболочки /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?
Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.
blockquote>Из #bash на Freenode.net
Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:
enable -n suspend
Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный
enable suspend
Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]
Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.
Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.
blockquote>Из #bash на Freenode.net