почему gdb не любит алиасы [duplicate]

С awk :

awk -F, '$2 != ref { i++; ref = $2 } { print $0 >"output" i }' input

разделит вход в соответствии со вторым столбцом на файлы output1 , output2 ...

Если вы хотите ограничить количество строк на выходе file:

awk -F, '$2 != ref { i++; ref = $2; lines = 0 } lines >= 1000 { i++; lines = 0 } { print $0 >"output" i; lines++ }' input

создаст выходные файлы, содержащие не более 1000 строк, соблюдая ограничение на второй столбец.

Вот еще один вариант, который разделяется при следующем изменении во втором столбце после достижения заданного лимита (в этом примере 1000 строк, предположительно, вы использовали бы 50000000):

awk -F, 'BEGIN { change = 1 } change && $2 != ref { i++; ref = $2; change = 0; lines = 0 } lines >= 1000 { change = 1 } { print $0 >"output" i; lines++; ref = $2 }' input
10
11.02.2018, 14:56
3 ответа

No necesita alias para tratar de obtener gdbargumentos de aceptación.

En tu caso sería:

gdb firefox
(gdb) set args --safe-mode
1
27.01.2020, 19:59

En los shells POSIX, los alias solo se expanden en la posición de comando (donde se espera un comando )o después de los alias cuya expansión termina en un carácter en blanco (en zsh, solo un espacio y en muchos otras implementaciones, solo espacio o pestaña )¹. También necesita la opción --argsa gdbpara poder pasar argumentos al programa que se está depurando. Entonces puedes hacer:

alias gdba='gdb --args ' # note the trailing space which does mean
                         # that aliases are to be expanded after it
alias ff='firefox --safe-mode'
gdba ff

¹ zsh también admite alias globales (conalias -g)que se expanden en muchos más lugares, pero probablemente no querrá usar un alias de este tipo para su firefox --safe-modeaquí, ya que no querría echo ff, por ejemplo, generar otra cosa que no sea ff.

4
27.01.2020, 19:59

Los alias son una característica del shell. La definición de un alias crea un nuevo nombre de comando de shell. Solo lo reconoce el shell y solo cuando aparece como un nombre de comando.

Por ejemplo, si escribe

> ff

en un indicador de shell, invocará su alias, pero si escribe

> echo ff

el ffes solo un argumento, no un comando. (Al menos en bash, puedes jugar algunos trucos si la definición del alias termina con un espacio. Consulte la respuesta de Stéphane Chazelas para obtener una posible solución si está decidido a utilizar alias de shell.)

Escribiste

> gdb ff

por lo que el shell invocó gdb, pasándole la cadena ffcomo argumento.

Puede pasar argumentos al programa depurado a través de la línea de comando gdb, pero debe usar la opción --args. Por ejemplo:

> gdb firefox --safe-mode

intenta (y falla )en tratar --safe-modecomo una opción para gdb. Para ejecutar el comando con un argumento, puede hacerlo manualmente:

> gdb firefox
...
(gdb) run --safe-mode

o, como me recuerda la respuesta de thrig , puedes usar--args:

> gdb --args firefox --safe-mode
...
(gdb) run

(El primer argumento que sigue a --argses el nombre del comando; todos los argumentos restantes se pasan al comando invocado.)

Es posible extraer los argumentos de un alias de shell, pero recomendaría simplemente definir un alias separado:

alias ff='firefox --safe-mode'
alias gdbff='gdb --args firefox --safe-mode'

O, mejor, usar funciones de shell, que son mucho más versátiles. El manual de bash dice:

For almost every purpose, shell functions are preferred over aliases.

20
27.01.2020, 19:59

Теги

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