Будет ли команда `script /dev/null` останавливать или влиять на запущенные приложения и сервер?

This was posted before the question was clarified, and now addresses a different need. I'm still leaving it here as that can be useful to others.

Я полагаю, ты хочешь уметь:

x *.txt

и *.txtдолжны быть переданы в нераскрытом виде в any.shи глобусы, которые впоследствии будут снова включены.

Вы не можете сделать это с bash. Вместо этого используйте zsh, где вы можете сделать:

alias x='noglob any.sh`

Где noglobотключает псевдонимы только для этой команды.

$ echo /etc/p*d
/etc/pam.d /etc/passwd /etc/profile.d
$ noglob echo /etc/p*d
/etc/p*d

Обратите внимание, что это влияет на раскрытие подстановок в аргументах только этих echoкоманд. *по-прежнему будет расширен в noglob echo $(echo *)или noglob eval 'echo *'или noglob. some-script, где some-scriptзаменяет echo *.

На самом деле, может быть способ сbash:

oneshot_noglob() {
  case $- in
    (*f*) ;; # globs already disabled
    (*) set -f; shot=0; debug_trap=$(trap -p DEBUG)
        trap '
          if ((++shot == 2)); then
            set +f
            trap - DEBUG
            '"$debug_trap"'
          fi' DEBUG;;
  esac
}

alias x='oneshot_noglob; any.sh'

Который использует ловушку DEBUG для восстановления set +fпосле выполнения одной команды после set -f.

Теперь, со всеми псевдонимами, которые содержат более одной команды, есть несколько предостережений.

echo foo | x

Становится:

echo foo | oneshort_noglob; any.sh

Таким образом, вывод echoподается только на oneshort_noglob.

То же самое для таких вещей, как:

cmd && x

Где any.shбудет выполняться независимо от того, будет ли cmdуспешным или нет.

Также обратите внимание, что это влияет на все универсальные объекты на каждом уровне подоболочки до тех пор, пока непосредственно перед выполнением второй команды в основном процессе оболочки.

Например, в x $(echo *; echo *) *ни один из этих *не будет расширен, потому что ловушка DEBUG не наследуется, если вы не установите опцию extdebug.

2
15.12.2019, 15:21
0 ответов

Теги

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