Почему «ls» спорадически выводит только «.» в корневом каталоге внешнего диска?

Есть несколько разных частей того, что вы, кажется, пытаетесь сделать.

Чтобы отключить переменную, имя которой указано в другой переменной, вы можете использовать -v , то есть

unset -v "$currentEnvVar"

для этой части. См. здесь

Чтобы присвоить переменной, вы можете использовать printf как

printf -v "$currentEnvVar" %s 'new value'

Чтобы распечатать значение, вы можете использовать косвенную ссылку как

printf 'The value is %s\n' "${!currentEnvVar}"

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

Вы также можете рассмотреть возможность использования ассоциативного массива , если он вам подходит:

declare -A envVarsByName
envVarsByName[$currentEnvVar]='new value'
printf 'New val: %s\n' "${envVarsByName[$currentEnvVar]]}"

9
06.03.2016, 01:16
1 ответ

ВРЕМЕННОЕ РЕШЕНИЕ:(вероятно, часть того, что оценит спрашивающий, даже если он специально не просил об этом)

Обращайтесь к текущему каталогу практически любым способом, кроме .. Пример:

cdв подкаталог, а затем запустите lsв родительском каталоге. То есть введите что-то вроде этого:

mkdir S; cd S ; /bin/ls -al..

Или обращайтесь к нему по полному пути. Пример:

ls /Volumes/microSD007

Для меня любой из этих обходных путей работает (, то есть они приводят к ожидаемому результату ), когда lsдает мне тот же неверный результат, о котором сообщил OP. (И для меня в dmesg нет вывода, когда lsведет себя странно.)

Я наблюдаю те же сбои в 10.12.6 в Terminal.app, работающем под управлением bash. То же самое в cshи sh, даже после установки TERM на vt100. Этот обходной путь работает и в этих оболочках.

И я согласен, что в stat64есть ошибка, как указано в ветке проблемы zsh, на которую нам указывает Нейл. (Я думал, что проблема была вызвана неисправной и/или поддельной флэш-памятью, и до сих пор иногда думаю, не является ли это причиной.)

Я заметил, что эта ошибка также затрагивает:

  • Dired-режим Emacs, потому что он вызывает lsи
  • lsпри использовании в режиме оболочки Emacs.
2
27.01.2020, 20:07

Теги

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