bash, code execution и аргументы

vlfdimir58


#!/bin/sh
php -r '$s = "bla.bla.bla"; $pos = strlen($s) - strrpos($s, "."); echo substr($s, 0, -$pos);' | xargs mkdir

Мне надо, чтобы вместо bla.bla.bla было $1 - аргумент у shell-скрипта.
Но если записать

#!/bin/sh
php -r '$s = "$1"; $pos = strlen($s) - strrpos($s, "."); echo substr($s,0,-$pos);' | xargs mkdir

то, нужного эффекта не возникает
mkdir: недостаточно аргументов  

Вопрос - как?

Werdna

Казалось бы, при чем здесь php?

Werdna

я бы написал все на шэле и не парился.
кстати, озвучь задачу, а то не понятно, что ты хочешь сделать

pitrik2

на шелле это выглядит получше
и самое главное работает
mkdir `echo "$1" | sed "s/\(.*\)\.\(.*\)$/\1/"`

Werdna

Аццкий сотона--жжецц!
вроде под этот таск есть готовая команда на шэле, я забыл ее имя, она все суффиксы выдирает после точки
а может и гоню, но просто я сам sed не знаю, так бы выкручивался

vlfdimir58

спасибо.
но все равно интересно, как сделать то, что я спросил?

vlfdimir58

дело в том, что я не знаю ни перла, ни седа, не специальной команды, которая обрежет строку до последней точки. Зато немного знаю пхп.

pitrik2

ну видимо только так: передать свою строчку на STDIN
тойсть
echo "$1" | php -r "..."
а в php ее из STDIN считать
(не помню как это делается)
зато стопудняк будет работать

Werdna

а эти все седы и авки никто не знает, походу всегда ботают и пишут

pitrik2

дело в том, что я не знаю ни перла, ни седа, не специальной команды, которая обрежет строку до последней точки. Зато немного знаю пхп.
щас в любом языке программирования есть регекспы, тойсть регулярные выражения
в том числе и в пхп
на них ГОРАЗДО проще подобные вещи делать
sed - самая простая и тупая прога для вызова регекспов
синтаксис ее в гугле на каждом углу
это я к тому что написать предложенный мною скрипт будет быстрее чем придумывать как подлючить для этого пхп, тем более что пхп для этого не предназначен
(хотя бы потому что sed стоит почти на любой машине, а пхп мало где стоит)

pitrik2

а эти все седы и авки никто не знает, походу всегда ботают и пишут
во-во
и я про то же
я sed нифига ненаю
а awk тем более
и этот скрипт написал открыв гугл и man sed

rosali

Полистал маленько и среди флуда не разглядел есть уже ответ или нет, так что напишу.
Внутри одинарных кавычек переменные не подставляются.
Надо так:

#!/bin/sh
php -r '$s = "'$1'"; $pos = strlen($s) - strrpos($s, "."); echo substr($s,0,-$pos);' | xargs mkdir

не очень то видно, что я там написал, вобщем перед $1 закрыл одинарную кавычку, а после $1 снова открыл.

vlfdimir58

спасибо!
Оставить комментарий
Имя или ник:
Комментарий: