Bash - переменная содержит знаки доллара

Вы можете расширить свою команду для поиска IP-адресов по информации whois :

cat access_log|cut -d' ' -f1|uniq -c|sort -r|head -n 10|while read COUNT IP; do whois $IP; done;
0
09.07.2018, 13:13
2 ответа

PHP exec()выполняет команду через оболочку, так что даже до того, как ваш скрипт запустится, есть оболочка, которая обрабатывает командную строку. $$в оболочке — это специальная переменная для идентификатора процесса оболочки, но вы получите то же самое для всего остального, что может быть переменной.

Руководство по PHP дляexecявно напоминает кавычки команды или аргументов для обработки оболочки:

Warning
When allowing user-supplied data to be passed to this function, use escapeshellarg() or escapeshellcmd() to ensure that users cannot trick the system into executing arbitrary commands.

Я не могу найти версию system()/ exec()/others, которая позволяла бы запускать команду напрямую (, например версию system()/ exec()с несколькими аргументами -в Perl ). ], поэтому может быть, что единственный вариант — использоватьescapeshellarg(). Он заключает аргумент в одинарные кавычки и также обрабатывает одинарные кавычки.

$ php -r '$foo="$$$"; system("/bin/echo $foo");'
21836$

$ php -r '$foo="$$$"; system("/bin/echo ". escapeshellarg($foo));'
$$$

(Вы можете использовать escapeshellcmd()для цитирования всего скрипта, но я бы избегал ситуаций, когда это необходимо. :язык оболочки достаточно сложен, и существует большая вероятность того, что цитирование не удастся в каком-то неясном случае.)


Кроме того, как упоминает Кусалананда, (и, как обычно, )вы все еще хотите заключать в кавычки переменные в вашем скрипте Bash. Поэтому используйте echo "$path"вместо echo $path. Знак доллара здесь не проблема, а символы пробела и шара.

См.:

4
28.01.2020, 02:18

В случае, если эта функция execв php реализована через sh -c cmd, вам необходимо вызвать:

 exec("bash.sh '$path'")

внутри вашего сценария оболочки, кажется, нет проблемы, поскольку $$будет расширен только в том случае, если вы используете eval.

0
28.01.2020, 02:18

Теги

Похожие вопросы