Вы ищете команду написать
? Эта команда позволяет вам отправить сообщение данному пользователю, которое затем будет распечатано на его терминале / консоли. При желании вы можете указать tty, на который будет отправлено сообщение.
Оболочка удаляет все кавычки до того, как cat
их увидит. Таким образом, cat -
, cat "-"
и cat '-'
передаются как массив ['cat', '-']
после токенизации пробелов,расширение подстановочных знаков и удаление кавычек оболочкой.
Кавычки используются оболочкой и не передаются команде:
напр.
cat "hello world" #this passes the single token `hello world`, to `cat`, as argument 1. However the quotes are not passed.
cat "-" # this passes the single token `-`, to `cat`, as argument 1. The same as if no quotes had been used.
GNU cat
закодирован для сравнения заданного имени файла со строкой " -" перед попыткой открыть его как файл:
if (STREQ (infile, "-"))
{
have_read_stdin = true;
input_desc = STDIN_FILENO;
if (file_open_mode & O_BINARY)
xset_binary_mode (STDIN_FILENO, O_BINARY);
}
else
{
input_desc = open (infile, file_open_mode);
if (input_desc < 0)
{
error (0, errno, "%s", quotef (infile));
ok = false;
continue;
}
}
Итак, если у вас есть файл с именем -
, вам нужно обойти эту логику, указав cat
путь и имя .
Кавычки защищают значение от разделения пробелами и, если оно заключено в одинарные кавычки, от раскрытия переменной. Кавычки не означают, что цитируемое является файлом. Чтобы явно указать, что значение является файлом, добавьте к нему префикс относительного или абсолютного пути.
Учитывая сказанное, можно предположить, что GNU cat
также должен проверять, является ли -
файлом в текущем рабочем каталоге, но было бы необычно, чтобы имена файлов начинались с дефиса или были бы только дефисом., так что это может быть проблемой производительности. В эссе Дэвида Уилера, Исправление имен файлов в UNIX и Linux , есть хорошее обсуждение этой проблемы в историческом контексте.