#!/www/server/bin/php -qC 'gnu'], ['arg' => "gna"]), "gna\n", "exec with argument"); is(it::exec("echo {0}", 'gna'), "gna\n", "exec with positional argument"); is(it::shell_command("echo {arg}", ['arg' => 'gna07,-:blah']), "echo gna07,-:blah", "don't quote arguments with only whitelistes characters"); is(it::shell_command("echo {arg}", ['arg' => '2>&1']), "echo '2>&1'", "quote arguments with dangerous characters"); is(it::shell_command("echo {arg}", ['arg' => '']), "echo ''", "quote empty arguments"); is(it::shell_command("echo {arg}", ['arg' => null]), "echo ", "remove null values"); is(it::shell_command("echo {arg}", ['arg' => false]), "echo ", "remove false values"); is(it::shell_command("echo {arg}", ['arg' => []]), "echo ", "remove empty arrays"); is(it::shell_command("echo {arg}", (object)['arg' => "foo"]) , "echo foo", "allow objects"); is(it::shell_command("echo {arg}", ['arg' => 1], ['arg' => 2]), "echo 2", "support varargs"); errlike(fn() => it::shell_command('echo -- $(echo {arg})', ['arg' => "-1"]), "leading - in value", "disallow leading dash in non-option args"); is( it::shell_command("echo {-opts}", ['-opts' => ['--longopt' => true]]), "echo --longopt", "options argument with long option" ); is( it::shell_command("echo {-opts}", ['-opts' => ['-onedash' => true]]), "echo -onedash", "... with long option but only one dash" ); is( it::shell_command("echo {-opts}", ['-opts' => ['-s' => true]]), "echo -s", "... with short option" ); is( it::shell_command("echo {-opts}", ['-opts' => ['--longopt' => 'val']]), "echo --longopt val", "... with long option with value" ); is( it::shell_command("echo {-opts}", ['-opts' => ['-onedash' => 'val']]), "echo -onedash val", "... with long option but only one dash and with value" ); is( it::shell_command("echo {-opts}", ['-opts' => ['-s' => 'val']]), "echo -s val", "... with short option with value" ); is( it::shell_command("echo {-opts}", ['-opts' => ['--longopt' => false]]), "echo ", "... with disabled long option" ); is( it::shell_command("echo {-opts}", ['-opts' => ['-s' => false]]), "echo ", "... with disabled short option" ); is( it::shell_command("echo {-opts}", ['-opts' => ['longopt' => true]]), "echo --longopt", "... long option without dashes" ); is( it::shell_command("echo {-opts}", ['-opts' => ['s' => true]]), "echo -s", "... short option without dashes" ); foreach (["", "C", "de_CH", "de_CH.utf8"] as $locale) { setlocale(LC_ALL, $locale); $arg = "preĆ¼post"; if (it::match('utf8', $locale)) $arg = it::any2utf8($arg); is(it::exec("echo {arg}", ['arg' => $arg]), $arg . "\n", "exec with argument and umlaut (locale '$locale')"); } is(it::_exec_quotevalue(""), "''", "empty arg needs quotes"); is(it::_exec_quotevalue("*"), "'*'", "special chars need quotes"); is(it::_exec_quotevalue("Aabcdef0123456789"), "Aabcdef0123456789", "simple case. tel:debug_getdata needs unquoted vals"); is(it::system('exit 0'), 0, 'return exit code 0'); is(it::system('exit 1'), 1, 'return exit code 1'); is(it::system('exit -1'), 255, 'return exit code unsigned'); @unlink('/tmp/it_system_test'); it::system('touch /tmp/it_system_test'); ok(file_exists('/tmp/it_system_test'), 'shell command gets executed'); @unlink('/tmp/it_system_test'); it::system('touch {path}', ['path' => '/tmp/it_system_test']); ok(file_exists('/tmp/it_system_test'), 'shell command with argument'); @unlink('/tmp/it_system_test'); it::system('touch {0}', '/tmp/it_system_test'); ok(file_exists('/tmp/it_system_test'), 'shell command with positional argument'); @unlink('/tmp/it_system_test');