Как создать файл bash и разрешить ему принимать аргумент от терминала?

Напомним, что для ностальгических чувств я помнил файлы .bat в DOS. :)

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

sudo phpdoc -o HTML: frames: earthli -d public_html / yoursite.dev/application/ -t public_html / yoursite.dev / docs /

есть способ сделать ярлык выше, так что мы можем печатать только:

sudo generateDoc.sh -a yoursite.dev

или даже лучше:

sudo generateDoc.sh -theVariableThatNeedsTobeChangedOnBashHere

Итак, если мы передадим ваш сайт.dev в командной строке, bash будет иметь ваш сайт.dev, если мы напишем yoursite2.dev, тогда bash будет иметь yoursite2.dev и т. д. ...

Любая подсказка?

Большое спасибо.

4
задан 22 April 2011 в 21:53

40 ответов

Попробуйте следующее:

#!/bin/bash
phpdoc -o HTML:frames:earthli -d public_html/"$1"/application/ \
    -t public_html/"$1"/docs/

Назовите его как sudo ./script.sh yoursite.

4
ответ дан 25 May 2018 в 21:58
  • 1
    Я вижу, что $ 1 означает первый аргумент. Зачем нам нужен ./? – MEM 22 April 2011 в 22:21
  • 2
    @MEM, поэтому bash знает, что скрипт, который вы пытаетесь запустить, находится в этом каталоге для небольшого объяснения здесь linfo.org/dot_slash.html – myusuf3 22 April 2011 в 22:34

Попробуйте следующее:

#!/bin/bash phpdoc -o HTML:frames:earthli -d public_html/"$1"/application/ \ -t public_html/"$1"/docs/

Назовите его как sudo ./script.sh yoursite.

4
ответ дан 25 July 2018 в 22:10

Попробуйте следующее:

#!/bin/bash phpdoc -o HTML:frames:earthli -d public_html/"$1"/application/ \ -t public_html/"$1"/docs/

Назовите его как sudo ./script.sh yoursite.

4
ответ дан 26 July 2018 в 19:24

Попробуйте следующее:

#!/bin/bash phpdoc -o HTML:frames:earthli -d public_html/"$1"/application/ \ -t public_html/"$1"/docs/

Назовите его как sudo ./script.sh yoursite.

4
ответ дан 31 July 2018 в 12:49

Попробуйте следующее:

#!/bin/bash phpdoc -o HTML:frames:earthli -d public_html/"$1"/application/ \ -t public_html/"$1"/docs/

Назовите его как sudo ./script.sh yoursite.

4
ответ дан 2 August 2018 в 03:39

Попробуйте следующее:

#!/bin/bash phpdoc -o HTML:frames:earthli -d public_html/"$1"/application/ \ -t public_html/"$1"/docs/

Назовите его как sudo ./script.sh yoursite.

4
ответ дан 4 August 2018 в 19:42

Попробуйте следующее:

  #! / bin / bash phpdoc -o HTML: frames: earthli -d public_html / "$ 1" / application / \ -t public_html / "$ 1" / docs  /  

Назовите его как sudo ./script.sh yoursite .

4
ответ дан 6 August 2018 в 03:47

Попробуйте следующее:

  #! / bin / bash phpdoc -o HTML: frames: earthli -d public_html / "$ 1" / application / \ -t public_html / "$ 1" / docs  /  

Назовите его как sudo ./script.sh yoursite .

4
ответ дан 7 August 2018 в 21:42

Попробуйте следующее:

  #! / bin / bash phpdoc -o HTML: frames: earthli -d public_html / "$ 1" / application / \ -t public_html / "$ 1" / docs  /  

Назовите его как sudo ./script.sh yoursite .

4
ответ дан 10 August 2018 в 09:56

Попробуйте следующее:

  #! / bin / bash phpdoc -o HTML: frames: earthli -d public_html / "$ 1" / application / \ -t public_html / "$ 1" / docs  /  

Назовите его как sudo ./script.sh yoursite .

4
ответ дан 13 August 2018 в 16:15
  • 1
    Я вижу, что $ 1 означает первый аргумент. Зачем нам нужен ./? – MEM 22 April 2011 в 22:21
  • 2
    @MEM, поэтому bash знает, что скрипт, который вы пытаетесь запустить, находится в этом каталоге для небольшого объяснения здесь linfo.org/dot_slash.html – myusuf3 22 April 2011 в 22:34

Вы также можете поместить эту функцию в свой .bashrc:

generateDocs() {
    sudo phpdoc -o HTML:frames:earthli \
                -d "public_html/$1/application/" \
                -t "public_html/$1/docs/"
}

, затем

generateDocs yoursite.dev
2
ответ дан 25 May 2018 в 21:58

Вот пример сценария, который я написал. [F3] означает «все аргументы переданы». Важно отметить, что они заключены в кавычки, потому что в противном случае белая область нарушит команду. Кстати, это не так.

jake@daedalus:~$ cat bin/play
#!/bin/bash
quodlibet --query "$*"
quodlibet --next
jake@daedalus:~$ play garrison keillor rhubarb pie

Как и Fido, не забудьте установить файл как исполняемый с помощью chmod +x programName.

Что-то, рассмотрим создание каталога bin в вашей домашней папке и добавление его в ваш $PATH. Тогда вы можете вызвать команду независимо от того, в какой папке вы находитесь. У меня есть эта строка в моем .bashrc: PATH=$HOME/bin:$PATH. Если вы этого не сделаете, вы используете абсолютный или относительный путь, когда вы вызываете свой скрипт, то есть:

jake@daedalus:/usr/local/share/docs$ /home/jake/bin/play foo fighters everlong
jake@daedalus:~/bin$ ./play placebo where is my mind

Я очень рекомендую руководство Grymoire по сценарию SH. То, что вам нужно сделать, это использовать позиционные параметры оболочки для принятия аргументов и вставки их в вашу команду. Кроме того, TLDP использует более глубокую обработку позиционных параметров BASH. Я начну с Grymoire, а затем прочитаю TLDP, когда вы будете готовы к более продвинутой обработке предмета.

1
ответ дан 25 May 2018 в 21:58
  • 1
    На самом деле, вы должны использовать "$@", а не "$*". С помощью "$*" все аргументы будут возвращены как одиночная строка . С помощью "$@" все аргументы будут возвращены, поскольку они были изначально предоставлены. – Scott Severance 22 April 2011 в 22:03
  • 2
    @mssever Хорошее отличие сделать, но, по крайней мере, в моем случае, я хочу, чтобы аргумент возвращался как одна строка. Grymoire указывает на разницу. – djeikyb 22 April 2011 в 22:26
  • 3
    @djeikyb: Поскольку вы знаете разницу между этими двумя переменными, мне любопытно, почему вы предпочитаете "$*" в вашем случае. Причина в том, что во всех сценариях оболочки, которые я сделал, я никогда не сталкивался с ситуацией, когда мне хотелось "$*". Я всегда использую "$@", чтобы я был защищен независимо от того, что аргументы. Какая ситуация лучше "$*"? – Scott Severance 23 April 2011 в 05:30
  • 4
    @mssever $ * рассматривает play adele rumour has it как одну строку: «У слуг адели есть это». $ @ рассматривает его как несколько аргументов: «adele», «слух», «имеет», «it». Если бы я использовал $ @, quodlibet выберет все «adele». песни, то что-нибудь с "слухами" в заголовке, тогда все, что имеет «имеет», и т. д., когда я хочу выбрать «слух адели», все вместе. – djeikyb 23 April 2011 в 09:25
  • 5
    Я бы предпочел назвать play "adele rumour has it" и использовать " $ @ " в скрипте. – enzotib 23 April 2011 в 12:22

Откройте ваш любимый текстовый редактор, вставьте следующее:

args=("$@")
sudo phpdoc -o HTML:frames:earthli -d public_html/${args[0]}/application/ -t public_html/${args[0]}/docs/

и сохраните его как (в данном случае) 'generateDoc.sh'. Следующее, что нужно сделать, это предоставить права на исполнение для вашего файла, так что откройте терминал и запустите: $ chmod +x generateDoc.sh Теперь вам нужно всего лишь вызвать файл: $ ./generateDoc.sh yoursite.dev здесь нет необходимости в sudo, потому что это уже внутри файла sh.

Надеюсь, это поможет!

0
ответ дан 25 May 2018 в 21:58
  • 1
    Большое спасибо Fido, я подумал о том, чего я хотел достичь, и я изменил свой вопрос соответственно, если вам это известно, вам также нужно обновить свой вопрос? – MEM 22 April 2011 в 21:44
  • 2
    Почему, для того, чтобы запустить его, нам нужно сделать ./? – MEM 22 April 2011 в 22:25
  • 3
    Я сделал chmod + x generateDodc.sh, но мне все еще нужно sudo :( Почему? – MEM 22 April 2011 в 22:34
  • 4
    Вам нужно ./ beacuse, это синтаксис для вызова sh-файла, вы также можете запустить его с помощью sh или bash. Тот факт, что файл является исполняемым, не означает, что вам не нужны специальные привилегии для запустите некоторые вещи. (Хотя я не уверен, что для запуска phpdoc необходимы специальные права) – Federico Vera 22 April 2011 в 22:42
  • 5
    Вам нужно указать ваши $ {args [0]} – enzotib 23 April 2011 в 12:23

Вот пример сценария, который я написал. [F3] означает «все аргументы переданы». Важно отметить, что они заключены в кавычки, потому что в противном случае белая область нарушит команду. Кстати, это не так.

jake@daedalus:~$ cat bin/play #!/bin/bash quodlibet --query "$*" quodlibet --next jake@daedalus:~$ play garrison keillor rhubarb pie

Как и Fido, не забудьте установить файл как исполняемый с помощью chmod +x programName.

Что-то, рассмотрим создание каталога bin в вашей домашней папке и добавление его в ваш $PATH. Тогда вы можете вызвать команду независимо от того, в какой папке вы находитесь. У меня есть эта строка в моем .bashrc: PATH=$HOME/bin:$PATH. Если вы этого не сделаете, вы используете абсолютный или относительный путь, когда вы вызываете свой скрипт, то есть:

jake@daedalus:/usr/local/share/docs$ /home/jake/bin/play foo fighters everlong jake@daedalus:~/bin$ ./play placebo where is my mind

Я очень рекомендую руководство Grymoire по сценарию SH. То, что вам нужно сделать, это использовать позиционные параметры оболочки для принятия аргументов и вставки их в вашу команду. Кроме того, TLDP использует более глубокую обработку позиционных параметров BASH. Я начну с Grymoire, а затем прочитаю TLDP, когда вы будете готовы к более продвинутой обработке предмета.

1
ответ дан 25 July 2018 в 22:10
  • 1
    На самом деле, вы должны использовать "$@", а не "$*". С помощью "$*" все аргументы будут возвращены как одиночная строка . С помощью "$@" все аргументы будут возвращены, поскольку они были изначально предоставлены. – Scott Severance 22 April 2011 в 22:03
  • 2
    @mssever Хорошее отличие сделать, но, по крайней мере, в моем случае, я хочу, чтобы аргумент возвращался как одна строка. Grymoire указывает на разницу. – djeikyb 22 April 2011 в 22:26
  • 3
    @djeikyb: Поскольку вы знаете разницу между этими двумя переменными, мне любопытно, почему вы предпочитаете "$*" в вашем случае. Причина в том, что во всех сценариях оболочки, которые я сделал, я никогда не сталкивался с ситуацией, когда мне хотелось "$*". Я всегда использую "$@", чтобы я был защищен независимо от того, что аргументы. Какая ситуация лучше "$*"? – Scott Severance 23 April 2011 в 05:30
  • 4
    @mssever $ * рассматривает play adele rumour has it как одну строку: «У слуг адели есть это». $ @ рассматривает его как несколько аргументов: «adele», «слух», «имеет», «it». Если бы я использовал $ @, quodlibet выберет все «adele». песни, то что-нибудь с "слухами" в заголовке, тогда все, что имеет «имеет», и т. д., когда я хочу выбрать «слух адели», все вместе. – djeikyb 23 April 2011 в 09:25
  • 5
    Я бы предпочел назвать play "adele rumour has it" и использовать & quot; $ @ & quot; в скрипте. – enzotib 23 April 2011 в 12:22

Откройте ваш любимый текстовый редактор, вставьте следующее:

args=("$@") sudo phpdoc -o HTML:frames:earthli -d public_html/${args[0]}/application/ -t public_html/${args[0]}/docs/

и сохраните его как (в данном случае) 'generateDoc.sh'. Следующее, что нужно сделать, это предоставить права на исполнение для вашего файла, так что откройте терминал и запустите: $ chmod +x generateDoc.sh Теперь вам нужно всего лишь вызвать файл: $ ./generateDoc.sh yoursite.dev здесь нет необходимости в sudo, потому что это уже внутри файла sh.

Надеюсь, это поможет!

0
ответ дан 25 July 2018 в 22:10
  • 1
    Большое спасибо Fido, я подумал о том, чего я хотел достичь, и я изменил свой вопрос соответственно, если вам это известно, вам также нужно обновить свой вопрос? – MEM 22 April 2011 в 21:44
  • 2
    Почему, для того, чтобы запустить его, нам нужно сделать ./? – MEM 22 April 2011 в 22:25
  • 3
    Я сделал chmod + x generateDodc.sh, но мне все еще нужно sudo :( Почему? – MEM 22 April 2011 в 22:34
  • 4
    Вам нужно ./ beacuse, это синтаксис для вызова sh-файла, вы также можете запустить его с помощью sh или bash. Тот факт, что файл является исполняемым, не означает, что вам не нужны специальные привилегии для запустите некоторые вещи. (Хотя я не уверен, что для запуска phpdoc необходимы специальные права) – Federico Vera 22 April 2011 в 22:42
  • 5
    Вам нужно указать ваши $ {args [0]} – enzotib 23 April 2011 в 12:23

Вы также можете поместить эту функцию в свой .bashrc:

generateDocs() { sudo phpdoc -o HTML:frames:earthli \ -d "public_html/$1/application/" \ -t "public_html/$1/docs/" }

, затем

generateDocs yoursite.dev
2
ответ дан 25 July 2018 в 22:10

Вот пример сценария, который я написал. [F3] означает «все аргументы переданы». Важно отметить, что они заключены в кавычки, потому что в противном случае белая область нарушит команду. Кстати, это не так.

jake@daedalus:~$ cat bin/play #!/bin/bash quodlibet --query "$*" quodlibet --next jake@daedalus:~$ play garrison keillor rhubarb pie

Как и Fido, не забудьте установить файл как исполняемый с помощью chmod +x programName.

Что-то, рассмотрим создание каталога bin в вашей домашней папке и добавление его в ваш $PATH. Тогда вы можете вызвать команду независимо от того, в какой папке вы находитесь. У меня есть эта строка в моем .bashrc: PATH=$HOME/bin:$PATH. Если вы этого не сделаете, вы используете абсолютный или относительный путь, когда вы вызываете свой скрипт, то есть:

jake@daedalus:/usr/local/share/docs$ /home/jake/bin/play foo fighters everlong jake@daedalus:~/bin$ ./play placebo where is my mind

Я очень рекомендую руководство Grymoire по сценарию SH. То, что вам нужно сделать, это использовать позиционные параметры оболочки для принятия аргументов и вставки их в вашу команду. Кроме того, TLDP использует более глубокую обработку позиционных параметров BASH. Я начну с Grymoire, а затем прочитаю TLDP, когда вы будете готовы к более продвинутой обработке предмета.

1
ответ дан 26 July 2018 в 19:24
  • 1
    На самом деле, вы должны использовать "$@", а не "$*". С помощью "$*" все аргументы будут возвращены как одиночная строка . С помощью "$@" все аргументы будут возвращены, поскольку они были изначально предоставлены. – Scott Severance 22 April 2011 в 22:03
  • 2
    @mssever Хорошее отличие сделать, но, по крайней мере, в моем случае, я хочу, чтобы аргумент возвращался как одна строка. Grymoire указывает на разницу. – djeikyb 22 April 2011 в 22:26
  • 3
    @djeikyb: Поскольку вы знаете разницу между этими двумя переменными, мне любопытно, почему вы предпочитаете "$*" в вашем случае. Причина в том, что во всех сценариях оболочки, которые я сделал, я никогда не сталкивался с ситуацией, когда мне хотелось "$*". Я всегда использую "$@", чтобы я был защищен независимо от того, что аргументы. Какая ситуация лучше "$*"? – Scott Severance 23 April 2011 в 05:30
  • 4
    @mssever $ * рассматривает play adele rumour has it как одну строку: «У слуг адели есть это». $ @ рассматривает его как несколько аргументов: «adele», «слух», «имеет», «it». Если бы я использовал $ @, quodlibet выберет все «adele». песни, то что-нибудь с "слухами" в заголовке, тогда все, что имеет «имеет», и т. д., когда я хочу выбрать «слух адели», все вместе. – djeikyb 23 April 2011 в 09:25
  • 5
    Я бы предпочел назвать play "adele rumour has it" и использовать & quot; $ @ & quot; в скрипте. – enzotib 23 April 2011 в 12:22

Откройте ваш любимый текстовый редактор, вставьте следующее:

args=("$@") sudo phpdoc -o HTML:frames:earthli -d public_html/${args[0]}/application/ -t public_html/${args[0]}/docs/

и сохраните его как (в данном случае) 'generateDoc.sh'. Следующее, что нужно сделать, это предоставить права на исполнение для вашего файла, так что откройте терминал и запустите: $ chmod +x generateDoc.sh Теперь вам нужно всего лишь вызвать файл: $ ./generateDoc.sh yoursite.dev здесь нет необходимости в sudo, потому что это уже внутри файла sh.

Надеюсь, это поможет!

0
ответ дан 26 July 2018 в 19:24
  • 1
    Большое спасибо Fido, я подумал о том, чего я хотел достичь, и я изменил свой вопрос соответственно, если вам это известно, вам также нужно обновить свой вопрос? – MEM 22 April 2011 в 21:44
  • 2
    Почему, для того, чтобы запустить его, нам нужно сделать ./? – MEM 22 April 2011 в 22:25
  • 3
    Я сделал chmod + x generateDodc.sh, но мне все еще нужно sudo :( Почему? – MEM 22 April 2011 в 22:34
  • 4
    Вам нужно ./ beacuse, это синтаксис для вызова sh-файла, вы также можете запустить его с помощью sh или bash. Тот факт, что файл является исполняемым, не означает, что вам не нужны специальные привилегии для запустите некоторые вещи. (Хотя я не уверен, что для запуска phpdoc необходимы специальные права) – Federico Vera 22 April 2011 в 22:42
  • 5
    Вам нужно указать ваши $ {args [0]} – enzotib 23 April 2011 в 12:23

Вы также можете поместить эту функцию в свой .bashrc:

generateDocs() { sudo phpdoc -o HTML:frames:earthli \ -d "public_html/$1/application/" \ -t "public_html/$1/docs/" }

, затем

generateDocs yoursite.dev
2
ответ дан 26 July 2018 в 19:24

Вот пример сценария, который я написал. [F3] означает «все аргументы переданы». Важно отметить, что они заключены в кавычки, потому что в противном случае белая область нарушит команду. Кстати, это не так.

jake@daedalus:~$ cat bin/play #!/bin/bash quodlibet --query "$*" quodlibet --next jake@daedalus:~$ play garrison keillor rhubarb pie

Как и Fido, не забудьте установить файл как исполняемый с помощью chmod +x programName.

Что-то, рассмотрим создание каталога bin в вашей домашней папке и добавление его в ваш $PATH. Тогда вы можете вызвать команду независимо от того, в какой папке вы находитесь. У меня есть эта строка в моем .bashrc: PATH=$HOME/bin:$PATH. Если вы этого не сделаете, вы используете абсолютный или относительный путь, когда вы вызываете свой скрипт, то есть:

jake@daedalus:/usr/local/share/docs$ /home/jake/bin/play foo fighters everlong jake@daedalus:~/bin$ ./play placebo where is my mind

Я очень рекомендую руководство Grymoire по сценарию SH. То, что вам нужно сделать, это использовать позиционные параметры оболочки для принятия аргументов и вставки их в вашу команду. Кроме того, TLDP использует более глубокую обработку позиционных параметров BASH. Я начну с Grymoire, а затем прочитаю TLDP, когда вы будете готовы к более продвинутой обработке предмета.

1
ответ дан 31 July 2018 в 12:49
  • 1
    На самом деле, вы должны использовать "$@", а не "$*". С помощью "$*" все аргументы будут возвращены как одиночная строка . С помощью "$@" все аргументы будут возвращены, поскольку они были изначально предоставлены. – Scott Severance 22 April 2011 в 22:03
  • 2
    @mssever Хорошее отличие сделать, но, по крайней мере, в моем случае, я хочу, чтобы аргумент возвращался как одна строка. Grymoire указывает на разницу. – djeikyb 22 April 2011 в 22:26
  • 3
    @djeikyb: Поскольку вы знаете разницу между этими двумя переменными, мне любопытно, почему вы предпочитаете "$*" в вашем случае. Причина в том, что во всех сценариях оболочки, которые я сделал, я никогда не сталкивался с ситуацией, когда мне хотелось "$*". Я всегда использую "$@", чтобы я был защищен независимо от того, что аргументы. Какая ситуация лучше "$*"? – Scott Severance 23 April 2011 в 05:30
  • 4
    @mssever $ * рассматривает play adele rumour has it как одну строку: «У слуг адели есть это». $ @ рассматривает его как несколько аргументов: «adele», «слух», «имеет», «it». Если бы я использовал $ @, quodlibet выберет все «adele». песни, то что-нибудь с "слухами" в заголовке, тогда все, что имеет «имеет», и т. д., когда я хочу выбрать «слух адели», все вместе. – djeikyb 23 April 2011 в 09:25
  • 5
    Я бы предпочел назвать play "adele rumour has it" и использовать & quot; $ @ & quot; в скрипте. – enzotib 23 April 2011 в 12:22

Откройте ваш любимый текстовый редактор, вставьте следующее:

args=("$@") sudo phpdoc -o HTML:frames:earthli -d public_html/${args[0]}/application/ -t public_html/${args[0]}/docs/

и сохраните его как (в данном случае) 'generateDoc.sh'. Следующее, что нужно сделать, это предоставить права на исполнение для вашего файла, так что откройте терминал и запустите: $ chmod +x generateDoc.sh Теперь вам нужно всего лишь вызвать файл: $ ./generateDoc.sh yoursite.dev здесь нет необходимости в sudo, потому что это уже внутри файла sh.

Надеюсь, это поможет!

0
ответ дан 31 July 2018 в 12:49
  • 1
    Большое спасибо Fido, я подумал о том, чего я хотел достичь, и я изменил свой вопрос соответственно, если вам это известно, вам также нужно обновить свой вопрос? – MEM 22 April 2011 в 21:44
  • 2
    Почему, для того, чтобы запустить его, нам нужно сделать ./? – MEM 22 April 2011 в 22:25
  • 3
    Я сделал chmod + x generateDodc.sh, но мне все еще нужно sudo :( Почему? – MEM 22 April 2011 в 22:34
  • 4
    Вам нужно ./ beacuse, это синтаксис для вызова sh-файла, вы также можете запустить его с помощью sh или bash. Тот факт, что файл является исполняемым, не означает, что вам не нужны специальные привилегии для запустите некоторые вещи. (Хотя я не уверен, что для запуска phpdoc необходимы специальные права) – Federico Vera 22 April 2011 в 22:42
  • 5
    Вам нужно указать ваши $ {args [0]} – enzotib 23 April 2011 в 12:23

Вы также можете поместить эту функцию в свой .bashrc:

generateDocs() { sudo phpdoc -o HTML:frames:earthli \ -d "public_html/$1/application/" \ -t "public_html/$1/docs/" }

, затем

generateDocs yoursite.dev
2
ответ дан 31 July 2018 в 12:49

Вот пример сценария, который я написал. [F3] означает «все аргументы переданы». Важно отметить, что они заключены в кавычки, потому что в противном случае белая область нарушит команду. Кстати, это не так.

jake@daedalus:~$ cat bin/play #!/bin/bash quodlibet --query "$*" quodlibet --next jake@daedalus:~$ play garrison keillor rhubarb pie

Как и Fido, не забудьте установить файл как исполняемый с помощью chmod +x programName.

Что-то, рассмотрим создание каталога bin в вашей домашней папке и добавление его в ваш $PATH. Тогда вы можете вызвать команду независимо от того, в какой папке вы находитесь. У меня есть эта строка в моем .bashrc: PATH=$HOME/bin:$PATH. Если вы этого не сделаете, вы используете абсолютный или относительный путь, когда вы вызываете свой скрипт, то есть:

jake@daedalus:/usr/local/share/docs$ /home/jake/bin/play foo fighters everlong jake@daedalus:~/bin$ ./play placebo where is my mind

Я очень рекомендую руководство Grymoire по сценарию SH. То, что вам нужно сделать, это использовать позиционные параметры оболочки для принятия аргументов и вставки их в вашу команду. Кроме того, TLDP использует более глубокую обработку позиционных параметров BASH. Я начну с Grymoire, а затем прочитаю TLDP, когда вы будете готовы к более продвинутой обработке предмета.

1
ответ дан 2 August 2018 в 03:39
  • 1
    На самом деле, вы должны использовать "$@", а не "$*". С помощью "$*" все аргументы будут возвращены как одиночная строка . С помощью "$@" все аргументы будут возвращены, поскольку они были изначально предоставлены. – Scott Severance 22 April 2011 в 22:03
  • 2
    @mssever Хорошее отличие сделать, но, по крайней мере, в моем случае, я хочу, чтобы аргумент возвращался как одна строка. Grymoire указывает на разницу. – djeikyb 22 April 2011 в 22:26
  • 3
    @djeikyb: Поскольку вы знаете разницу между этими двумя переменными, мне любопытно, почему вы предпочитаете "$*" в вашем случае. Причина в том, что во всех сценариях оболочки, которые я сделал, я никогда не сталкивался с ситуацией, когда мне хотелось "$*". Я всегда использую "$@", чтобы я был защищен независимо от того, что аргументы. Какая ситуация лучше "$*"? – Scott Severance 23 April 2011 в 05:30
  • 4
    @mssever $ * рассматривает play adele rumour has it как одну строку: «У слуг адели есть это». $ @ рассматривает его как несколько аргументов: «adele», «слух», «имеет», «it». Если бы я использовал $ @, quodlibet выберет все «adele». песни, то что-нибудь с "слухами" в заголовке, тогда все, что имеет «имеет», и т. д., когда я хочу выбрать «слух адели», все вместе. – djeikyb 23 April 2011 в 09:25
  • 5
    Я бы предпочел назвать play "adele rumour has it" и использовать & quot; $ @ & quot; в скрипте. – enzotib 23 April 2011 в 12:22

Откройте ваш любимый текстовый редактор, вставьте следующее:

args=("$@") sudo phpdoc -o HTML:frames:earthli -d public_html/${args[0]}/application/ -t public_html/${args[0]}/docs/

и сохраните его как (в данном случае) 'generateDoc.sh'. Следующее, что нужно сделать, это предоставить права на исполнение для вашего файла, так что откройте терминал и запустите: $ chmod +x generateDoc.sh Теперь вам нужно всего лишь вызвать файл: $ ./generateDoc.sh yoursite.dev здесь нет необходимости в sudo, потому что это уже внутри файла sh.

Надеюсь, это поможет!

0
ответ дан 2 August 2018 в 03:39
  • 1
    Большое спасибо Fido, я подумал о том, чего я хотел достичь, и я изменил свой вопрос соответственно, если вам это известно, вам также нужно обновить свой вопрос? – MEM 22 April 2011 в 21:44
  • 2
    Почему, для того, чтобы запустить его, нам нужно сделать ./? – MEM 22 April 2011 в 22:25
  • 3
    Я сделал chmod + x generateDodc.sh, но мне все еще нужно sudo :( Почему? – MEM 22 April 2011 в 22:34
  • 4
    Вам нужно ./ beacuse, это синтаксис для вызова sh-файла, вы также можете запустить его с помощью sh или bash. Тот факт, что файл является исполняемым, не означает, что вам не нужны специальные привилегии для запустите некоторые вещи. (Хотя я не уверен, что для запуска phpdoc необходимы специальные права) – Federico Vera 22 April 2011 в 22:42
  • 5
    Вам нужно указать ваши $ {args [0]} – enzotib 23 April 2011 в 12:23

Вы также можете поместить эту функцию в свой .bashrc:

generateDocs() { sudo phpdoc -o HTML:frames:earthli \ -d "public_html/$1/application/" \ -t "public_html/$1/docs/" }

, затем

generateDocs yoursite.dev
2
ответ дан 2 August 2018 в 03:39

Вот пример сценария, который я написал. [F3] означает «все аргументы переданы». Важно отметить, что они заключены в кавычки, потому что в противном случае белая область нарушит команду. Кстати, это не так.

jake@daedalus:~$ cat bin/play #!/bin/bash quodlibet --query "$*" quodlibet --next jake@daedalus:~$ play garrison keillor rhubarb pie

Как и Fido, не забудьте установить файл как исполняемый с помощью chmod +x programName.

Что-то, рассмотрим создание каталога bin в вашей домашней папке и добавление его в ваш $PATH. Тогда вы можете вызвать команду независимо от того, в какой папке вы находитесь. У меня есть эта строка в моем .bashrc: PATH=$HOME/bin:$PATH. Если вы этого не сделаете, вы используете абсолютный или относительный путь, когда вы вызываете свой скрипт, то есть:

jake@daedalus:/usr/local/share/docs$ /home/jake/bin/play foo fighters everlong jake@daedalus:~/bin$ ./play placebo where is my mind

Я очень рекомендую руководство Grymoire по сценарию SH. То, что вам нужно сделать, это использовать позиционные параметры оболочки для принятия аргументов и вставки их в вашу команду. Кроме того, TLDP использует более глубокую обработку позиционных параметров BASH. Я начну с Grymoire, а затем прочитаю TLDP, когда вы будете готовы к более продвинутой обработке предмета.

1
ответ дан 4 August 2018 в 19:42
  • 1
    На самом деле, вы должны использовать "$@", а не "$*". С помощью "$*" все аргументы будут возвращены как одиночная строка . С помощью "$@" все аргументы будут возвращены, поскольку они были изначально предоставлены. – Scott Severance 22 April 2011 в 22:03
  • 2
    @mssever Хорошее отличие сделать, но, по крайней мере, в моем случае, я хочу, чтобы аргумент возвращался как одна строка. Grymoire указывает на разницу. – djeikyb 22 April 2011 в 22:26
  • 3
    @djeikyb: Поскольку вы знаете разницу между этими двумя переменными, мне любопытно, почему вы предпочитаете "$*" в вашем случае. Причина в том, что во всех сценариях оболочки, которые я сделал, я никогда не сталкивался с ситуацией, когда мне хотелось "$*". Я всегда использую "$@", чтобы я был защищен независимо от того, что аргументы. Какая ситуация лучше "$*"? – Scott Severance 23 April 2011 в 05:30
  • 4
    @mssever $ * рассматривает play adele rumour has it как одну строку: «У слуг адели есть это». $ @ рассматривает его как несколько аргументов: «adele», «слух», «имеет», «it». Если бы я использовал $ @, quodlibet выберет все «adele». песни, то что-нибудь с "слухами" в заголовке, тогда все, что имеет «имеет», и т. д., когда я хочу выбрать «слух адели», все вместе. – djeikyb 23 April 2011 в 09:25
  • 5
    Я бы предпочел назвать play "adele rumour has it" и использовать & quot; $ @ & quot; в скрипте. – enzotib 23 April 2011 в 12:22

Откройте ваш любимый текстовый редактор, вставьте следующее:

args=("$@") sudo phpdoc -o HTML:frames:earthli -d public_html/${args[0]}/application/ -t public_html/${args[0]}/docs/

и сохраните его как (в данном случае) 'generateDoc.sh'. Следующее, что нужно сделать, это предоставить права на исполнение для вашего файла, так что откройте терминал и запустите: $ chmod +x generateDoc.sh Теперь вам нужно всего лишь вызвать файл: $ ./generateDoc.sh yoursite.dev здесь нет необходимости в sudo, потому что это уже внутри файла sh.

Надеюсь, это поможет!

0
ответ дан 4 August 2018 в 19:42
  • 1
    Большое спасибо Fido, я подумал о том, чего я хотел достичь, и я изменил свой вопрос соответственно, если вам это известно, вам также нужно обновить свой вопрос? – MEM 22 April 2011 в 21:44
  • 2
    Почему, для того, чтобы запустить его, нам нужно сделать ./? – MEM 22 April 2011 в 22:25
  • 3
    Я сделал chmod + x generateDodc.sh, но мне все еще нужно sudo :( Почему? – MEM 22 April 2011 в 22:34
  • 4
    Вам нужно ./ beacuse, это синтаксис для вызова sh-файла, вы также можете запустить его с помощью sh или bash. Тот факт, что файл является исполняемым, не означает, что вам не нужны специальные привилегии для запустите некоторые вещи. (Хотя я не уверен, что для запуска phpdoc необходимы специальные права) – Federico Vera 22 April 2011 в 22:42
  • 5
    Вам нужно указать ваши $ {args [0]} – enzotib 23 April 2011 в 12:23

Вы также можете поместить эту функцию в свой .bashrc:

generateDocs() { sudo phpdoc -o HTML:frames:earthli \ -d "public_html/$1/application/" \ -t "public_html/$1/docs/" }

, затем

generateDocs yoursite.dev
2
ответ дан 4 August 2018 в 19:42

Вы также можете поместить эту функцию в свой .bashrc:

  generateDocs () {sudo phpdoc -o HTML: frames: earthli \ -d "public_html / $ 1 / application /" \ -  t "public_html / $ 1 / docs /"}  

then

  generateDocs yoursite.dev  
2
ответ дан 6 August 2018 в 03:47

Откройте ваш любимый текстовый редактор, вставьте следующее:

  args = ("$ @") sudo phpdoc -o HTML: frames: earthli -d public_html / $ {args [0]  } / application / -t public_html / $ {args [0]} / docs /  

и сохранить его как (в данном случае) 'generateDoc.sh'. Следующее, что нужно сделать, это предоставить права на исполнение для вашего файла, поэтому откройте терминал и запустите: $ chmod + x generateDoc.sh Теперь вам нужно всего лишь вызвать файл: $ ./generateDoc.sh yoursite.dev здесь нет необходимости в sudo , потому что он уже находится в файле sh.

Надеюсь, что это поможет!

0
ответ дан 6 August 2018 в 03:47

Другие вопросы по тегам:

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