Как запустить Vim из ловушки и иметь возможность возобновить его работу после приостановки?

stat /bin/su muestra en un sistema:

Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

Está la representación octal 4755de los 12 bits de modo. El número corresponde a los bits:

octal    4   7   5   5
bits   100 111 101 101
       sst uuu ggg ooo
       ug  rwx rwx rwx

Donde uuu, gggy oooson ​​los bits de permiso para el usuario, grupo y otros. El grupo restante (el primero en orden )contiene los bits setuid (su), setgid(sg)y sticky (t).

Los bits setuid y sticky a menudo no se mencionan, ya que son cero para la mayoría de los archivos. Todavía están allí para cada archivo, guardados junto con los demás.


Si realmente nos ponemos manos a la obra, algunos sistemas de archivos e interfaces almacenan el tipo de archivo a lo largo de los bits de modo, en los bits aún -más altos. Lo anterior solo representa 12 bits, por lo que con un campo de 16 -bits, sobran 4. Véase, por ejemplo, la descripción de st_modeenstat(2).

2
22.05.2018, 00:18
1 ответ

El problema es iniciar un trabajo en segundo plano desde una trampa. El trabajo parece "perderse" a veces. Cambiar vima vim &hace que el trabajo se retenga a veces, por lo que puede haber una condición de carrera.

Puede evitar esto si no inicia el trabajo desde una trampa. Coloque una bandera en la trampa y encienda vim fuera de la trampa, en el gancho precmd. Aquí hay una adaptación de su ejemplo mínimo.

restart_vim=
catch_signal_usr1() {
  trap catch_signal_usr1 USR1
  restart_vim=1
}
precmd () {
  if [[ -n $restart_vim ]]; then
    restart_vim=
    vim
  fi
}
trap catch_signal_usr1 USR1
func() {
  vim
}

Pierde la capacidad de mostrar Vim en primer plano mientras edita un símbolo del sistema, pero eso no funciona de todos modos, ya que vim y zsh estarían compitiendo por la terminal.

En su código real, puede tener problemas porque está iniciando vim desde una subcapa. No ejecute la función nven una subcapa :use llaves { … } around the body, not parentheses. UseIFS local to make theIFS `variable local.

1
27.01.2020, 22:18

Теги

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