Передача нескольких параметров через xargs

Для меня редактирование количества поддерживаемых цветов (см. : help t_Co ) является решением:

set t_Co=0

При выделении различий возникают проблемы с окраской (например, желтым по белому), независимо от того, включена ли подсветка синтаксиса или нет.

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

Вы можете настроить другие параметры, упомянутые ранее, но это устраняет проблему с удобочитаемостью.

9
19.01.2018, 22:32
3 ответа

Я считаю, что вы не можете использовать -Iтаким образом. Но вы можете получить желаемый эффект / поведение, сказав:

echo {1..8} | xargs -n2 sh -c 'echo "the number $1 comes before $2"' sh

Это, по сути, создает специальныйоднострочный сценарий оболочки который xargsвыполняется с помощью sh -c. Два значения, которые xargsанализирует из входных данных передаются этому «сценарию». Затем оболочка присваивает эти значения $1и $2, на который вы затем можете ссылаться в «сценарии».

45
27.01.2020, 20:04

prueba esto:

echo {1..8} |xargs -n 2 bash -c 'echo "the number $0 comes before $1"'
2
27.01.2020, 20:04

En el caso específico de printf, siempre podrías hacer:

echo {1..8} | xargs printf 'the number %s comes before %s\n'

porque printftiene una capacidad intrínsecaxargs-para ejecutar varias veces si se le dan más argumentos de los que necesita para una sola invocación. Aunque eso tiene poca ventaja sobre

printf 'the number %s comes before %s\n' {1..8}

Y para listas grandes, el simple comando xargspodría resultar en xargsejecutando varias instancias de printf, algunos de los cuales pueden tener números impares de argumentos. Puede pasar -n 1000a xargspara protegerse contra eso, donde 1000 es un número par que debe ser lo suficientemente pequeño como para no alcanzar el límite de la lista de argumentos demasiado larga y lo suficientemente grande como para evitar que se ejecute muchos printfart.

Tenga en cuenta que xargsllamaría, no el printfintegrado de su shell, sino lo externo printf, con cada invocación en un nuevo proceso separado.

También tenga en cuenta que para una entrada vacía, excepto en algunos BSD, aún se ejecutaría printfuna vez sin ningún argumento. GNU xargsy compatibles tienen un -r(o--no-run-if-empty)opción para evitar eso.

Para ser claros, esta simple respuesta es específica para su printfejemplo, y no funcionaría en el caso general donde debe pasar dos parámetros a la vez a su comando (como sería el caso de diff, por ejemplo ). Para resolver el problema general con zsh, puedes usar:

for i j ({1..8}) echo "the number $i comes before $j"
6
27.01.2020, 20:04

Теги

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