-
Não, ele gera
/usr/bin/ls
como um processo filho. Você pode querer brincar comstrace
se estiver interessado neste tipo de coisas:[foo@turtle ~]$ strace -f -eexecve -o bash.strace bash [foo@turtle ~]$ ls bash.strace [foo@turtle ~]$ exit [foo@turtle ~]$ cat bash.strace 26213 execve("/usr/bin/bash", ["bash"], [/* 37 vars */]) = 0 26214 +++ exited with 0 +++ 26213 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=26214, si_uid=10003, si_status=0, si_utime=0, si_stime=0} --- 26230 execve("/usr/bin/ls", ["ls", "--color=auto"], [/* 37 vars */]) = 0 26230 +++ exited with 0 +++ 26213 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=26230, si_uid=10003, si_status=0, si_utime=0, si_stime=0} --- 26213 +++ exited with 0 +++
-
Sim, é mais ou menos o tipo de diferença: se é exportado ou não:
[foo@turtle ~]$ DIR_I_WANT_TO_LS=/home/foo [foo@turtle ~]$ ls $DIR_I_WANT_TO_LS bar bash.strace ls_from_a_script.sh [foo@turtle ~]$ set -x [foo@turtle ~]$ ls $DIR_I_WANT_TO_LS bar bash.strace ls_from_a_script.sh [foo@turtle ~]$ ./ls_from_a_script.sh $DIR_I_WANT_TO_LS= bar bash.strace ls_from_a_script.sh $DIR_I_WANT_TO_LS=/home/foo/bar [foo@turtle ~]$ export DIR_I_WANT_TO_LS [foo@turtle ~]$ ./ls_from_a_script.sh $DIR_I_WANT_TO_LS=/home/foo bar bash.strace ls_from_a_script.sh $DIR_I_WANT_TO_LS=/home/foo/bar
-
Não, funciona perfeitamente com qualquer programa (binário, shell, ruby, python, lua, nó ...). Os últimos geralmente têm uma estrutura chamada frequentemente de
ENV
para isso.