Как перевести несладкую синтаксическую оболочку (команды Bash )в «более низкие» типы кода, такие как ассемблер или даже машинный код?

Как bashсценарий:

#!/bin/bash
i=1
while [ -f "log${i}.txt" ]; do
  ((i++))
done
echo "log${i}.txt"

Цикл while -увеличивает переменную $iдо тех пор, пока существует файл log${i}.txt. echoвыводит несуществующее -имя файла со следующим номером.

-1
07.05.2021, 19:19
2 ответа

Поскольку вы упомянули Bash, перевод cdна ассемблер можно выполнить следующим образом:

git://git.savannah.gnu.org/bash.git
cd bash
./configure
make
cd builtins
./mkbuiltins -D. cd.def
gcc -S -DHAVE_CONFIG_H -DSHELL  -I. -I..  -I.. -I../include -I../lib -I.    -g -O2 -Wno-parentheses -Wno-format-security cd.c

Вы найдете соответствующий язык ассемблера в builtins/cd.s. (Вам потребуется установить ряд инструментов разработки; как это сделать, зависит от вашего дистрибутива, и ./configureподскажет, чего не хватает.)

Сомневаюсь, что это будет очень полезно, особенно для новичков в программировании.

0
28.07.2021, 11:33

Чтобы выполнять команды оболочки высокого уровня, вам нужна сложная программа, оболочка.

Никакой ассемблерный или машинный код не изменит текущий каталог процесса, если только это не последовательность инструкций, вызывающая ядро. Ядро — это еще более сложное программное обеспечение, чем оболочка, и в выполнении chdirнет ничего простого, опять же есть уровни абстракции файловой системы.

В общем, ассемблер или машинный код мало что дают, особенно новичкам в программировании.

0
28.07.2021, 11:33

Теги

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