Передача кавычек и полных строк для избиения-c или zsh-c

one <<(two) выполняет команду two и передает его вывод по каналу в one. Более распространенный способ записать это two | one, таким образом, Ваша команда может также быть записана:

curl -s https://rvm.beginrescueend.com/install/rvm | bash

Та связь разорвана теперь, но веб-сайт говорит для использования этого вместо этого:

curl -L get.rvm.io | bash -s stable

curl выводы, что это загружает, таким образом, это загружает файл в get.rvm.io и передает его содержание по каналу для избиения. Если Вы просто работаете curl управляйте отдельно, что Вы видите, что это - a bash сценарий, который загружает и устанавливает rvm

3
24.05.2013, 22:27
2 ответа

Использовать system LIST, который не вызывает оболочку. т.е.

system('/bin/bash', '-c', $your_command);

вместо

system("/bin/bash -c '$your_command'");
9
27.01.2020, 21:10
  • 1
    Спасибо! Есть ли способ передать текущие переменные среды той оболочке?. Был бы system('source', '/bin/zsh', '-c', $full_cmd') работа? –  Amelio Vazquez-Reina 24.05.2013, 23:08
  • 2
    Вы не должны делать ничего для передачи текущей среды дочернему процессу. Необходимо было бы сделать что-то, если бы Вы не хотели, чтобы та оболочка наследовала Вашу среду. –  cjm 24.05.2013, 23:10
  • 3
    Хм я добираюсь: Can't exec '/bin/bash': Not a directory когда я пробую system('/bin/bash', '-c', 'echo Hello world'); даже при том, что это, конечно, там. –  Amelio Vazquez-Reina 25.05.2013, 01:36
  • 4
    @user815423426, это хорошо работает для меня. Делает system("/bin/bash -c 'echo Hello world'"); работа? –  cjm 25.05.2013, 02:11

Так как Вы находитесь в Perl, Вы не ограничены одинарными и двойными кавычками:

system q{bash -c 'echo "Hello World"'};
1
27.01.2020, 21:10

Теги

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