macOS High Sierra, 10.13.3 (17D102)
- Если я запускаю в терминале
sysctl -n hw.memsize
он работает нормально, я получаю номер - Если я запускаю
which sysctl
я получаю/usr/sbin/sysctl
который кажется правильным
Как запустить ту же команду из сценария оболочки? Ищете кросс-ОС решение. Использую чистый sh везде.
Я пытался:
#!/bin/sh
$("sysctl -n hw.memsize")
exit 1
1 Результат: строка 2: sysctl -n hw.memsize: команда не найдена
#!/bin/sh
$("/usr/sbin/sysctl -n hw.memsize")
exit 1
2 Результат: строка 2: /usr /sbin /sysctl -n hw.memsize: такого файла или каталога нет
#!/bin/sh
echo `sysctl -n hw.memsize`
exit 1
3 Результат: строка 2: 17179869184: команда не найдена
Не уверен, почему команда не нашла правильный вывод.
#!/bin/sh
eval "sysctl -n hw.memsize"
exit 1
4 Результат: такой же, как в терминале: 17179869184 Но я хочу избежать eval.
В то время как 4th работает как epxected, он использует eval, и я стараюсь избегать его. 3-й кажется почти правильным и не уверен, почему 2-й говорит, что такого файла нет, пока он существует.
Файл сценария sh имеет +x chmod.