Утилита для добавления кавычек к аргументу

Явное указание пути к исполняемому файлу заставит оболочку попытаться использовать этот путь для выполнения исполняемого файла.

Если сказать ./myscriptи если myscriptне находится в текущем каталоге, вы получите сообщение об ошибке «Нет такого файла или каталога». Это означает, что не использует переменную $PATH.

$PATHдолжен быть:-разделенным списком каталогов (, а не файлов ), в которых оболочка будет искать исполняемые файлы, если в командной строке не указан путь. Добавление текущего каталога(.)к переменной PATH(представляет собой потенциальную угрозу безопасности, см. " Безопасно ли добавлять. в мой PATH? Почему? " ).

Другое простое решение, когда вы просто хотите получить доступ к одному исполняемому файлу за пределами вашего обычного $PATH— это использовать псевдоним:

alias myscript=/path/to/myscript

(это находится в вашем файле инициализации оболочки, вероятно, .bashrcдляbash).

В псевдониме необходимо указать полный абсолютный путь к исполняемому файлу.

0
07.01.2020, 07:06
3 ответа

Моя первоначальная проблема получила правильное решение, предложенное @muru, однако, возможно, какое-либо использование Cутилиты для цитирования. Я сейчас написал (в моей системе была команда quote, но она цитировала только 1-й аргумент, игнорируя остальные ), как обычно, используйте gcc quoteit.c -o quoteit && chmod +x quoteitдля сборки предоставленного кода в quoteit.c в текущей папке:

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(int argc, char *argv[])  
{ 
    if (argc ==2 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help")))
    {
        printf("The program surrounds set of arguments with double quotes\n");
        printf("Example: quoteit 12 23 outputs \"12 23\"\n");
        return 0;
    } 
    //printf("%d\n", argc); 

    printf("\""); 
    for (int i=1; i< argc; i++) 
    {
        printf("%s", argv[i]); 
        if (u<args-1) printf(" ");
    } 
    printf("\"");
    return 0; 
}
0
28.01.2020, 02:57

Я не понимаю, как это может помочь с вашей другой проблемой, но если вам действительно нужна команда, которая печатает свои аргументы, разделенные пробелом, и все это окружено "и завершается символом новой строки, вы мог бы сделать это с помощьюawk:

awk -- '
  BEGIN{
    printf "\""
    for (i = 1; i < ARGC; i++) printf "%s", (i == 1 ? "" : " ") ARGV[i]
    print "\""
  }' arg1 "arg 2" 'arg 3' 'arg "4"'

отпечатки:

"arg1 arg 2 arg 3 arg "4""
1
28.01.2020, 02:57

Это можно сделать с помощью простого сценария Bash:

#!/bin/bash
echo "\"$*\""

Уже $*сгенерирован полный список аргументов. echoпросто окружает их экранированными кавычками.

myquote.sh hi, 'how do' you "do?"
"hi, how do you do?"

Теперь, относится к предполагаемому использованию этого скрипта 'quoter' для помещения в кавычки имен файлов, полученных с помощью findв его предложении exec, в этом нет необходимости, потому что вы можете добавить кавычки прямо в аргумент фигурных скобок, как в этом примере, чтобы он был правильно принят командой grep:

find /etc -exec grep -Hi "{}" \;

или, в случае конвейера к xargs, используя предложение -print0, чтобы пометить имена файлов разделителем NULL для команды xargs, следующей в конвейере.

0
03.11.2020, 03:12

Теги

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