Я могу выполнить команду после того, как пользователь будет использовать Ctrl-C для уничтожения команды?

find . -type d -print | tr -d '\n' | wc -m

tr удалит все символы новой строки и wc будет считать число, которое Вы хотите.

3
03.08.2013, 02:48
2 ответа

Вы можете использовать подоболочку.

alias build='( cd $BUILD_ROOT; m; cp ...; cp...; deploy; deploy; deploy; )'

В вышеупомянутом примере, cd $BUILD_ROOT изменяет текущий рабочий каталог подоболочки, но не интерактивной оболочки, которая называет псевдоним. Для универсального случая можно использовать подоболочку и прерывание выхода.

alias build='( cleanup() { do; cleanup; }; trap cleanup EXIT; cd $BUILD_ROOT; m; cp ...; cp...; deploy; deploy; deploy; )'

Действительно пересмотрите использование сценария все же. Вышеупомянутый пример выглядел бы намного более чистым в сценарии. Сценарии интерпретируются в их собственных экземплярах оболочки. Синтаксис подоболочки не был бы необходим в сценарии.

Вы упомянули в комментарии, что сценарии зависят от Вашего псевдонима. Это предполагает определение источника сценариев вместо того, чтобы выполнить их который обычно является плохой практикой. Кроме того, Вы упомянули, что существуют псевдонимы, которые зависят от Вашего псевдонима. Можно использовать сценарии в псевдонимах.

4
27.01.2020, 21:13
  • 1
    В более общем плане процессы выполняются в контексте, отдельном от оболочки вызова. Сценарий оболочки просто, оказывается, немного специальный вид вызова процесса. –  a CVn 02.08.2013, 19:34
  • 2
    @MichaelKjörling:Спасибо. я изменил ту часть своего ответа. –   02.08.2013, 19:53

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

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

Естественный выбор затем становится для запуска подоболочки из псевдонима. Например:

~$ alias xyz1='( cd ~/tmp; sleep 10; cd ~ )'
~$ alias xyz2='cd ~/tmp; sleep 10; cd ~'
~$ xyz2
^C
~/tmp$ cd
~$ xyz1
^C
~$

Это изменяет рабочий каталог только в подоболочке, которая выходит, когда или псевдоним заканчивает выполняться обычно или прерывается, например, через Ctrl+C.

3
27.01.2020, 21:13
  • 1
    Похож у Вас и Evan есть a"! $" момент 8-). –  slm♦ 02.08.2013, 19:57
  • 2
    @slm Да, мы действительно заканчивали тем, что говорили в значительной степени то же самое в в значительной степени то же время. Я позволю сообществу решить, кто добился большего успеха :) –  a CVn 02.08.2013, 19:59
  • 3
    , я внес свой вклад и +1'd Вы оба 8-). –  slm♦ 02.08.2013, 20:00

Теги

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