Utilizzare il programma env
. Env è un comando che avvia un altro programma con un ambiente eventualmente modificato. Perché env è un programma, non ha accesso ai builtin di shell, agli alias e quant'altro.
Questo comando verrà eseguito il programma di eco, alla ricerca di esso nel vostro percorso di comando:
$ env echo foo
È possibile verificare questo utilizzando strace
per monitorare le chiamate di sistema durante l'esecuzione echo
vs env echo
:
$ strace -f -e trace=process bash -c 'echo foo'
execve("/bin/bash", ["bash", "-c", "echo foo"], [/* 16 vars */]) = 0
arch_prctl(ARCH_SET_FS, 0x7f153fa14700) = 0
foo
exit_group(0) = ?
$ strace -f -e trace=process bash -c 'env echo foo'
execve("/bin/bash", ["bash", "-c", "env echo foo"], [/* 16 vars */]) = 0
arch_prctl(ARCH_SET_FS, 0x7f474eb2e700) = 0
execve("/usr/bin/env", ["env", "echo", "foo"], [/* 16 vars */]) = 0
arch_prctl(ARCH_SET_FS, 0x7f60cad15700) = 0
execve("/usr/local/sbin/echo", ["echo", "foo"], [/* 16 vars */]) = -1 ENOENT (No such file or directory)
execve("/usr/local/bin/echo", ["echo", "foo"], [/* 16 vars */]) = -1 ENOENT (No such file or directory)
execve("/usr/sbin/echo", ["echo", "foo"], [/* 16 vars */]) = -1 ENOENT (No such file or directory)
execve("/usr/bin/echo", ["echo", "foo"], [/* 16 vars */]) = -1 ENOENT (No such file or directory)
execve("/sbin/echo", ["echo", "foo"], [/* 16 vars */]) = -1 ENOENT (No such file or directory)
execve("/bin/echo", ["echo", "foo"], [/* 16 vars */]) = 0
arch_prctl(ARCH_SET_FS, 0x7f0146906700) = 0
foo
exit_group(0) = ?
'il comando incorporato al posto del comando' WTF? – ForceBru
Perché non si chiama qualcos'altro? –
@El_Hoy: Solo curioso, qual è l'eco interno 'peggio di'/bin/echo' nel tuo scenario? –