bash говорит & ldquo; нет такого файла или каталога & rdquo; но файл присутствует [дубликат]

В MySQL есть два типа кавычек:

  1. ' для включения строковых литералов
  2. ` для включения идентификаторов, таких как имена таблиц и столбцов

И тогда есть ", который является частным случаем. Он может быть использован для one вышеупомянутых целей за раз в зависимости от сервера MySQL sql_mode :

  1. By по умолчанию символ " может использоваться для вложения строковых литералов точно так же, как '
  2. В режиме ANSI_QUOTES символ " может использоваться для заключите идентификаторы так же, как `

Следующий запрос приведет к различным результатам (или ошибкам) ​​в зависимости от режима SQL:

SELECT "column" FROM table WHERE foo = "bar"

ANSI_QUOTES disabled

Запрос будет выбирать строковый литерал "column", где column foo равен строке "bar"

ANSI_QUOTES enabled

В запросе будет выбран столбец column где столбец foo равен столбцу bar

. Когда использовать

  • , я предлагаю вам избегать использования ", чтобы ваш код не зависел от SQL mode
  • Всегда указывайте идентификаторы, так как это хорошая практика (довольно много вопросов о SO обсуждают это)

109
задан xpt 22 December 2013 в 17:47
поделиться

7 ответов

Ответ в этой строке вывода readelf -a в исходном вопросе

  [Requesting program interpreter: /lib/ld-linux.so.2]

Мне не было файла /lib/ld-linux.so.2, который необходим для запускать 32-разрядные приложения. Пакет Ubuntu с этим файлом - libc6-i386.

144
ответ дан Lorin Hochstein 1 September 2018 в 02:12
поделиться

Ну, другой возможной причиной этого может быть простой разрыв строки в конце каждой строки и линии shebang. Если вы кодировали в Windows IDE, то возможно, что окна добавили свой собственный разрыв строки в конце каждой строки и при попытке для запуска его на Linux проблемы с разрывом строки

0
ответ дан Amir 1 September 2018 в 02:12
поделиться
16
ответ дан Anon 1 September 2018 в 02:12
поделиться

Эта ошибка возникает при попытке выполнить 32-разрядную сборку на 64-разрядной версии Linux.

Также сравните то, что file должно было сказать в двоичном коде, который вы пытались (т. е. 32-битный), с тем, что вы получаете за свой /bin/gzip:

$ file /bin/gzip
/bin/gzip: ELF 64-bit LSB executable, x64-64, version 1 (SYSV), \
dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

, который что я получаю на Ubuntu 9.10 для amd64 aka x86_64.

Редактировать : Ваше расширенное сообщение показывает, что, поскольку вывод readelf также отражает 32-битную сборку.

17
ответ дан Dirk Eddelbuettel 1 September 2018 в 02:12
поделиться

Я думаю, что у вас установлена ​​x86-64, у меня нет компоновщика времени выполнения i386. Вероятно, ENOENT связан с тем, что ОС ищет что-то вроде /lib/ld.so.1 или аналогичного. Обычно это часть 32-разрядной версии glibc, и пока я не знаком с Ubuntu, я бы предположил, что у них есть какой-то 32-разрядный пакет совместимости для установки. К счастью, gzip зависит только от библиотеки C, поэтому, вероятно, все, что вам нужно будет установить.

3
ответ дан karunski 1 September 2018 в 02:12
поделиться

Возможно, что исполняемый файл статически связан, и поэтому ldd gzip не видит ссылок, потому что это не так. Я не очень много знаю о вещах, которые далеки назад, поэтому я не знаю, будут ли несовместимы, если библиотеки связаны статически. Я мог бы ожидать, что это будет.

Я знаю, что это самое очевидное, и я уверен, что вы это сделали, но chmod +x ./gzip, да? Такой файл или каталог не является классическим симптомом того, что это не делается, поэтому я упоминаю об этом.

1
ответ дан user 1 September 2018 в 02:12
поделиться

У меня также были проблемы, потому что мой программный интерпретатор был /lib/ld-linux.so.2, однако он был на встроенном устройстве, поэтому я решил проблему, попросив gcc использовать ls-uClibc вместо этого следующим образом:

-Wl,--dynamic-linker=/lib/ld-uClibc.so.0
1
ответ дан Velizar Hristov 1 September 2018 в 02:12
поделиться
Другие вопросы по тегам:

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