Literalmente, o mesmo comando dentro de um script deve ser exatamente o mesmo :
sysctl -n hw.memsize
Suas tentativas concentram-se mais na sintaxe $(…)
e eu não sei por que a necessidade de $(…)
em primeiro lugar. Se você precisar (por exemplo, vamos armazenar o resultado em uma variável), então deve ser como
memsize=$(sysctl -n hw.memsize)
sem aspas dentro do $(…)
.
$("sysctl -n hw.memsize")
1 Result:
line 2: sysctl -n hw.memsize: command not found
É por causa de citações. Seu shell trata a string inteira como uma única palavra, um único comando (executável) para ser executado; enquanto sua intenção é passar um comando e dois argumentos. Sem aspas você obteria command not found
de qualquer maneira porque o shell tentaria avaliar (executado neste caso) o resultado do comando interno (é isso que o $(…)
faz), por exemplo o resultado pode ser 17179869184
. Não há nenhum comando 17179869184
em seu sistema, está lá? Observe que command not found
viria de um nível diferente do que quando você usa aspas.
$("/usr/sbin/sysctl -n hw.memsize")
2 Result:
line 2: /usr/sbin/sysctl -n hw.memsize: No such file or directory
Basicamente o mesmo que acima. A mensagem de erro é diferente por causa de /
no "comando", mas o mecanismo é o mesmo.
echo 'sysctl -n hw.memsize'
3 Result:
line 2: 17179869184: command not found
Isso deve funcionar (mas é um código horrível). Tem certeza de que não foi apenas 'sysctl -n hw.memsize'
sem echo
? Isso seria o mesmo que o caso "sem aspas" explicado em seu primeiro resultado.