env
programını kullanın. Env, muhtemelen değiştirilmiş bir ortam ile başka bir program başlatan bir komuttur. Env bir program olduğu için, kabuk yerleşiklerine, takma adlara ve neye sahip olmadığı erişilemez.
komut yolundaki onu ararken, eko programı çalışacak Bu komut: çalıştırırken
$ env echo foo
Sistem çağrıları izlemek için strace
kullanarak doğrulayabilirsiniz echo
env echo
vs:
$ 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) = ?
'WTF komutu yerine yerleşik komut? – ForceBru
Neden jsut başka bir şey değil? –
@El_Hoy: Sadece merak ediyorum, senaryonun içindeki "echo" kelimesi/bin/echo'dan daha mı kötü? –