создание псевдонима для cmd с обратными кавычками

Решение, которое предоставил @Kusalananda, превосходит это. Я предоставил его, не задумываясь о том, что $ (cat ...) делает с точки зрения использования памяти. Я оставлю его здесь для справки - он будет работать и не страшен, если файлы маленькие.

#!/bin/bash

for name in $(cat names); do
    for year in $(cat years); do
        echo "${name}${year}"
    done
done
2
22.01.2017, 17:18
2 ответа

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

alias ncstop 'nc stop `nc list | awk '\''/Running/{print $1}'\''`'

Это работает, потому что при использовании символа ' для цитирования используются специальные символы, такие как | , $ и обратная кавычка не интерпретируются оболочкой. Это позволяет этим специальным символам попасть в определение псевдонима. Но в процессе определения псевдонима оболочка удаляет этот внешний слой '. Что на самом деле заканчивается в определении псевдонима, должно быть:

nc stop `nc list | awk '/Running/{print $1}'`

Конструкция '\' ' часто требует небольшого пояснения. Но вкратце это три апострофа. Первая завершает предыдущую строку в кавычках, следующая (которая экранирована, чтобы оболочка не интерпретировала ее) проходит, а третья начинает другую строку в кавычках. Таким образом, конструкция '\' ' позволяет использовать апостроф (например: ' или одинарные кавычки ) внутри строки, заключенной в одинарные кавычки.

Получение всех кавычек и экранирований прямо в строке, которая должна пройти через несколько уровней интерпретации, очень быстро становится беспорядочным и сложным. Был комментарий к вопросу, который рекомендовал (для bash ) вместо этого изучить реализацию псевдонимов как функций.Я почти уверен, что то же самое можно посоветовать для tcsh .

3
27.01.2020, 22:19

просто используйте $(command)вместо обратных кавычек, например. заменить файл набором аргументов командной строки:

alias run="gdb --args./program $(cat args.txt)"
1
12.11.2020, 14:52

Теги

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