다음을 고려하십시오:
cd ~
cd $HOME
첫 번째 명령은 덜 추상적인 두 번째 명령에 대한 가능한 설탕 구문이라고 말하고 싶습니다.
프로그래밍 초보자에게 쉘에 초점을 맞춰 명령이 점점 덜 추상화되는 방식을 보여주기 위해 다음과 같이 묻습니다.
설탕이 아닌 구문 쉘(Bash) 명령을 "낮은" 유형의 코드로 변환하는 방법 , 예를 들어 어셈블리 코드나 기계어 코드(또는 cd $HOME
어셈블리 표현과 같은 그 사이의 모든 것)?
이를 달성하고 컴퓨터 명령이 단순한 것에서 복잡한 것으로 어떻게 변하는지 보여주기 위해 어떤 소프트웨어(아마도 셸에서)를 사용할 수 있습니까?
답변1
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
무엇이 누락되었는지 알려줄 것입니다.)
나는 이것이 특히 프로그래밍 초보자에게 매우 유용할 것이라고 생각합니다.
답변2
고급 쉘 명령을 실행하려면 복잡한 프로그램인 쉘이 필요합니다.
커널을 호출하는 일련의 명령이 아닌 이상 어셈블리나 기계어 코드는 프로세스의 현재 디렉터리를 변경하지 않습니다. 커널은 셸보다 더 복잡한 소프트웨어이며 실행이 간단하지 않습니다 chdir
. 파일 시스템 추상화 계층도 있습니다.
일반적으로 말하면, 특히 프로그래밍 초보자에게는 어셈블리 코드나 기계 코드의 이점이 거의 없습니다.