Расширение псевдонима в функции выполняется при чтении функции, а не при ее выполнении. Определение псевдонима в функции выполняется при выполнении функции.
См. Псевдоним и функции
иhttps://www.gnu.org/software/bash/manual/html_node/Aliases.html
Это означает, что псевдоним будет определен при выполнении функции main
, но при первом чтении функции псевдоним еще не был определен. Таким образом, в первый раз функция main
выполнит функцию Hi
три раза.
Когда вы используете сценарий во второй раз, псевдоним уже определен из предыдущего запуска и может быть расширен при чтении определения функции. Теперь, когда вы вызываете функцию, она запускается с развернутым псевдонимом.
Различное поведение возникает только в том случае, если сценарий исходный с . Sample.sh
, т. е. когда он запускается в одной и той же оболочке несколько раз. Когда вы запускаете его в отдельной оболочке как ./Sample.sh
, он всегда будет показывать поведение первого запуска.
Это ошибка моста USB -на -ATA в корпусе USB. У меня та же ошибка, мой мостовой чип от JMicron (, и если вы погуглите для этого производителя, вы найдете других людей, затронутых этим ).
Я изучил это, когда впервые заметил, и IIRC, проблема в том, что протокол SCSI имеет информацию о физическом и логическом размере в некоторых из более поздних полей в ответе на команду, которая его запрашивает., и прошивка моста, вероятно, имеет некоторую константу длины для этого ответа, которая слишком мала и не передает это поле.
В то время я также пытался найти способ просто сообщить ядру напрямую о размере физического сектора и переопределить неверную информацию, но не смог его найти. Может быть, что-то изменилось за это время.
Если данные важны, приобретите несколько корпусов с микросхемой моста без ошибки.