Почему мой сценарий оболочки висит без расширения .sh?

Я создал сценарий оболочки /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?

6
задан 13 December 2010 в 07:19

33 ответа

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] он, он возобновляется).

То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в ​​оболочке. Я бы заподозрил бывшего перед последним.

10
ответ дан 25 May 2018 в 23:59
  • 1
    Я подозревал, что это может быть так, но which suspend и man suspend оба ничего не вернули. Первое не удивительно, потому что which не обрабатывает встроенные функции, но последнее раздражает. – Chris Conway 13 December 2010 в 17:12
  • 2
    help suspend - билет. – Chipaca 13 December 2010 в 17:47
  • 3
    which - бесполезная команда. Вместо этого используйте встроенный type. Попробуйте, type suspend, type -a suspend и type -P suspend. help type, чтобы узнать больше. Но на самом деле, просто не назовите свои скрипты с именем встроенной оболочки. – geirha 22 January 2011 в 21:44

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 он, он возобновляется).

То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в ​​оболочке. Я бы заподозрил бывшего перед последним.

10
ответ дан 25 July 2018 в 22:45

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 он, он возобновляется).

То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в ​​оболочке. Я бы заподозрил бывшего перед последним.

10
ответ дан 27 July 2018 в 00:13

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 он, он возобновляется).

То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в ​​оболочке. Я бы заподозрил бывшего перед последним.

10
ответ дан 31 July 2018 в 11:19

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 он, он возобновляется).

То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в ​​оболочке. Я бы заподозрил бывшего перед последним.

10
ответ дан 31 July 2018 в 12:19

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 он, он возобновляется).

То, что вы видите такое же поведение, вызывая его с помощью пути, является либо экспериментальной ошибкой, либо ошибкой в ​​оболочке. Я бы заподозрил бывшего перед последним.

10
ответ дан 2 August 2018 в 04:10

suspend является встроенным bash,

  suspend: suspend [-f] Приостановить выполнение оболочки.  Приостановить выполнение этой оболочки до получения сигнала SIGCONT.  Если принудительные, блокировки входа не могут быть приостановлены.  Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.   

и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).

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

10
ответ дан 4 August 2018 в 20:14

suspend является встроенным bash,

  suspend: suspend [-f] Приостановить выполнение оболочки.  Приостановить выполнение этой оболочки до получения сигнала SIGCONT.  Если принудительные, блокировки входа не могут быть приостановлены.  Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.   

и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).

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

10
ответ дан 6 August 2018 в 04:15

suspend является встроенным bash,

  suspend: suspend [-f] Приостановить выполнение оболочки.  Приостановить выполнение этой оболочки до получения сигнала SIGCONT.  Если принудительные, блокировки входа не могут быть приостановлены.  Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.   

и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).

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

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

suspend является встроенным bash,

  suspend: suspend [-f] Приостановить выполнение оболочки.  Приостановить выполнение этой оболочки до получения сигнала SIGCONT.  Если принудительные, блокировки входа не могут быть приостановлены.  Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.   

и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).

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

10
ответ дан 10 August 2018 в 10:30

suspend является встроенным bash,

  suspend: suspend [-f] Приостановить выполнение оболочки.  Приостановить выполнение этой оболочки до получения сигнала SIGCONT.  Если принудительные, блокировки входа не могут быть приостановлены.  Параметры: -f принудительно приостановить, даже если оболочка является оболочкой входа. Статус выхода: возвращает успех, если управление заданием не включено или не возникает ошибка.   

и как встроенные имеют приоритет, просто набрав suspend будет вести себя точно так, как вы описываете: оболочка блокирует, пока вы ее не убьете (если вы kill -CONT он, он возобновляется).

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

10
ответ дан 13 August 2018 в 16:55
  • 1
    Я подозревал, что это может быть так, но , которые приостанавливают и man suspend , ничего не возвращают. Первое не удивительно, потому что , который не обрабатывает встроенные функции, но последнее раздражает. – Chris Conway 13 December 2010 в 17:12
  • 2
    help suspend - билет. – Chipaca 13 December 2010 в 17:47
  • 3
    , который является бесполезной командой. Вместо этого используйте встроенный тип . Попробуйте, тип suspend , type -a suspend и type -P suspend . help , чтобы узнать больше. Но на самом деле, просто не назовите свои скрипты с именем встроенной оболочки. – geirha 22 January 2011 в 21:44

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:

enable -n suspend

Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный

enable suspend

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

1
ответ дан 25 May 2018 в 23:59

Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 25 May 2018 в 23:59

Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 25 July 2018 в 22:45

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:

enable -n suspend

Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный

enable suspend

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

1
ответ дан 25 July 2018 в 22:45

Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 27 July 2018 в 00:13

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:

enable -n suspend

Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный

enable suspend

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

1
ответ дан 27 July 2018 в 00:13

Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 31 July 2018 в 11:19

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:

enable -n suspend

Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный

enable suspend

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

1
ответ дан 31 July 2018 в 11:19

Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 31 July 2018 в 12:19

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:

enable -n suspend

Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный

enable suspend

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

1
ответ дан 31 July 2018 в 12:19

Чтобы ответить на ваш вопрос о расширении sh; это на самом деле обратное, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash не является sh-скриптом (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 2 August 2018 в 04:10

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить построение:

enable -n suspend

Затем вы можете запустить свою команду как обычную команду. Затем вы снова включаете встроенный

enable suspend

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

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

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:

  enable -n suspend  

Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный

  enable suspend  

Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]

1
ответ дан 4 August 2018 в 20:14

Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 4 August 2018 в 20:14

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:

  enable -n suspend  

Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный

  enable suspend  

Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]

1
ответ дан 6 August 2018 в 04:15

Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 6 August 2018 в 04:15

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:

  enable -n suspend  

Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный

  enable suspend  

Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]

1
ответ дан 7 August 2018 в 22:19

Чтобы ответить на ваш вопрос о расширении sh; на самом деле это наоборот, вы не должны его использовать.

Не используйте расширения для ваших скриптов. Сценарии определяют новые команды, которые вы можете запускать, а командам обычно не предоставляются расширения. Кроме того: сценарий bash - это not sh скрипт (поэтому не используйте .sh), и расширение будет вызывать зависания только в том случае, если скрипт будет перезаписан на другом языке.

Из #bash на Freenode.net

0
ответ дан 7 August 2018 в 22:19

Если вы хотите, чтобы ваша команда завершила настройку, вам сначала нужно отключить встроенное:

  enable -n suspend  

Затем вы можете запустить ваша команда, как обычная команда. Затем вы снова включите встроенный

  enable suspend  

Я удивлен, что встроенный вызов вызывается, когда вы вызываете свою команду с полным путем. [ ! d4]

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

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

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