В чем разница между ./ и sh для запуска скрипта?

Grub отлично работает на диске с таблицами разделов GPT, однако для установки на секционированный диск GPT на диске должен быть небольшой (1 мб) раздел, особенно для grub. (на секционированных дисках msdos есть пространство, которое использует grub, но этого нет в разделах GPT). Последние версии gparted способны создавать эти небольшие разделы. К сожалению, если ваш диск был разделен без этого раздела, вам не повезло, так как перемещение раздела даже одного мегабайта - это большое испытание. https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html

Grub 2 поддерживает загрузку из GPT даже из BIOS, так как не требует основного режима UEFI. Все компьютеры Apple, не являющиеся яблоками, которые я знаю, поддерживают загрузку в режиме BIOS, и это рекомендуется для загрузки UEFI.

66
задан 8 April 2011 в 00:31

66 ответов

Короткий вариант:

sh - интерпретатор командной строки (тире) .Running sh my_script делает черту интерпретацией скрипта. ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #!/bin/bash или даже #!/bin/ruby (как показано на ruby my_script).
34
ответ дан 31 July 2018 в 10:28
mkdir ~/bin ; cp myscript.sh ~/bin/ echo "export PATH="$PATH:/home/$USER/bin" >> ~/.profile ; source ~/.profile ;

Не /usr/sbin, это для несущественных административных инструментов, /usr/local/bin - лучший выбор, если вы не хотите иметь ~/bin/, но желательно избегать sudo насколько это возможно. .

0
ответ дан 31 July 2018 в 11:29
  • 1
    В Ubuntu по умолчанию ~/.profile уже есть код для добавления ~/bin, если он существует, к PATH. В другой заметке не ставьте расширения на скрипты. – geirha 24 January 2011 в 11:44
  • 2
    Я ссылался на & lt; myscriptname.sh & gt ;, но что является обоснованием для того, чтобы не помещать расширения в скрипты? Обычно я делаю это, потому что наличие видимых текстовых файлов не позволяет мне пытаться редактировать двоичные файлы, которые я также храню в ~ / bin /. (ls ~/bin/|wc -l = 428) Я положил туда много чего;) – Joey1978 24 January 2011 в 12:01
  • 3
    Представьте, что вы пишете сценарий для достижения конкретной задачи. Тогда вы понимаете, что писать этот сценарий в python сделает его намного более эффективным, поэтому вы переписываете его в python. Теперь у вас есть два варианта. 1) Оставьте теперь очень вводящее в заблуждение расширение .sh, или 2) переименуйте скрипт и выполните поиск и замените все использование сценария на использование нового имени. Если вы посмотрите на скрипты в /bin и /usr/bin, вы увидите, что они не используют расширения. – geirha 2 February 2011 в 12:49

Разница, которую вы делаете,

с sh, вы запускаете программу, которая будет интерпретировать строки в вашем скрипте так же, как вы бы набрали их в интерактивной подсказке терминала , с ./ вы делаете ярлык, предполагая, что скрипт находится прямо здесь, в текущем каталоге, в котором вы сидите. И он будет исполняемым (потому что, например, вы выпустили chmod +x myscript.sh), экономя ваше бесценное время на будущее раз :-)
3
ответ дан 31 July 2018 в 11:29
  • 1
    +1 для того, чтобы быть единственным, чтобы кратко указать, что файл должен быть исполняемым. – Mikel 4 February 2011 в 02:04

Есть три основные причины, по которым вы можете получить сообщение об ошибке:

файл не является исполняемым запустите chmod +x <myscriptname.sh>, чтобы исправить, что раздел не позволяет запускать скрипты (установлен «noexec») скопируйте скрипт на /usr/local/bin, строка #! имеет ошибку, убедитесь, что первая строка - #!/bin/sh или #!/bin/bash

Если ваша первая строка выглядит правильно, но все еще не работает, сделайте убедитесь, что файл не имеет окончаний строки DOS.

Ошибка будет выглядеть примерно так:

$ ./myscript.sh bash: ./myscript.sh: /bin/bash^M: bad interpreter: No such file or directory

Вы можете исправить это, запустив dos2unix <myscriptname.sh>, или если вы это есть, perl -p -i -e 's/\r\n$/\n/' <myscriptname.sh>.

3
ответ дан 31 July 2018 в 11:29

И ответ заключается в том, что sh - это имя для очень популярной оболочки. Но устарели и заменены другими. В настоящее время sh связан с другими оболочками, установленными на машине. например У меня есть баш. Запуск любой оболочки из sh обычно запускает некоторый режим совместимости с оригинальным поведением «оболочки».

Так что решение довольно простое. Посмотрите, что находится за командой sh (ls -al / bin / sh), и поставьте #! / Bin / whatever_you_find_there в качестве первой строки (или если что-то подобное в вашем скрипте отредактирует).

И, альтернативно, может возникнуть ошибка в самом скрипте. Подобно зависимости, которую выполняет sh, но не интерпретатор, который фактически используется.

0
ответ дан 31 July 2018 в 11:29

Короткий вариант:

sh - интерпретатор командной строки (тире) .Running sh my_script делает черту интерпретацией скрипта. ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #!/bin/bash или даже #!/bin/ruby (как показано на ruby my_script).
34
ответ дан 31 July 2018 в 11:29
mkdir ~/bin ; cp myscript.sh ~/bin/ echo "export PATH="$PATH:/home/$USER/bin" >> ~/.profile ; source ~/.profile ;

Не /usr/sbin, это для несущественных административных инструментов, /usr/local/bin - лучший выбор, если вы не хотите иметь ~/bin/, но желательно избегать sudo насколько это возможно. .

0
ответ дан 2 August 2018 в 04:01
  • 1
    В Ubuntu по умолчанию ~/.profile уже есть код для добавления ~/bin, если он существует, к PATH. В другой заметке не ставьте расширения на скрипты. – geirha 24 January 2011 в 11:44
  • 2
    Я ссылался на & lt; myscriptname.sh & gt ;, но что является обоснованием для того, чтобы не помещать расширения в скрипты? Обычно я делаю это, потому что наличие видимых текстовых файлов не позволяет мне пытаться редактировать двоичные файлы, которые я также храню в ~ / bin /. (ls ~/bin/|wc -l = 428) Я положил туда много чего;) – Joey1978 24 January 2011 в 12:01
  • 3
    Представьте, что вы пишете сценарий для достижения конкретной задачи. Тогда вы понимаете, что писать этот сценарий в python сделает его намного более эффективным, поэтому вы переписываете его в python. Теперь у вас есть два варианта. 1) Оставьте теперь очень вводящее в заблуждение расширение .sh, или 2) переименуйте скрипт и выполните поиск и замените все использование сценария на использование нового имени. Если вы посмотрите на скрипты в /bin и /usr/bin, вы увидите, что они не используют расширения. – geirha 2 February 2011 в 12:49

Разница, которую вы делаете,

с sh, вы запускаете программу, которая будет интерпретировать строки в вашем скрипте так же, как вы бы набрали их в интерактивной подсказке терминала , с ./ вы делаете ярлык, предполагая, что скрипт находится прямо здесь, в текущем каталоге, в котором вы сидите. И он будет исполняемым (потому что, например, вы выпустили chmod +x myscript.sh), экономя ваше бесценное время на будущее раз :-)
3
ответ дан 2 August 2018 в 04:01
  • 1
    +1 для того, чтобы быть единственным, чтобы кратко указать, что файл должен быть исполняемым. – Mikel 4 February 2011 в 02:04

Есть три основные причины, по которым вы можете получить сообщение об ошибке:

файл не является исполняемым запустите chmod +x <myscriptname.sh>, чтобы исправить, что раздел не позволяет запускать скрипты (установлен «noexec») скопируйте скрипт на /usr/local/bin, строка #! имеет ошибку, убедитесь, что первая строка - #!/bin/sh или #!/bin/bash

Если ваша первая строка выглядит правильно, но все еще не работает, сделайте убедитесь, что файл не имеет окончаний строки DOS.

Ошибка будет выглядеть примерно так:

$ ./myscript.sh bash: ./myscript.sh: /bin/bash^M: bad interpreter: No such file or directory

Вы можете исправить это, запустив dos2unix <myscriptname.sh>, или если вы это есть, perl -p -i -e 's/\r\n$/\n/' <myscriptname.sh>.

3
ответ дан 2 August 2018 в 04:01

И ответ заключается в том, что sh - это имя для очень популярной оболочки. Но устарели и заменены другими. В настоящее время sh связан с другими оболочками, установленными на машине. например У меня есть баш. Запуск любой оболочки из sh обычно запускает некоторый режим совместимости с оригинальным поведением «оболочки».

Так что решение довольно простое. Посмотрите, что находится за командой sh (ls -al / bin / sh), и поставьте #! / Bin / whatever_you_find_there в качестве первой строки (или если что-то подобное в вашем скрипте отредактирует).

И, альтернативно, может возникнуть ошибка в самом скрипте. Подобно зависимости, которую выполняет sh, но не интерпретатор, который фактически используется.

0
ответ дан 2 August 2018 в 04:01

Короткий вариант:

sh - интерпретатор командной строки (тире) .Running sh my_script делает черту интерпретацией скрипта. ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #!/bin/bash или даже #!/bin/ruby (как показано на ruby my_script).
34
ответ дан 2 August 2018 в 04:01
mkdir ~/bin ; cp myscript.sh ~/bin/ echo "export PATH="$PATH:/home/$USER/bin" >> ~/.profile ; source ~/.profile ;

Не /usr/sbin, это для несущественных административных инструментов, /usr/local/bin - лучший выбор, если вы не хотите иметь ~/bin/, но желательно избегать sudo насколько это возможно. .

0
ответ дан 4 August 2018 в 20:04
  • 1
    В Ubuntu по умолчанию ~/.profile уже есть код для добавления ~/bin, если он существует, к PATH. В другой заметке не ставьте расширения на скрипты. – geirha 24 January 2011 в 11:44
  • 2
    Я ссылался на & lt; myscriptname.sh & gt ;, но что является обоснованием для того, чтобы не помещать расширения в скрипты? Обычно я делаю это, потому что наличие видимых текстовых файлов не позволяет мне пытаться редактировать двоичные файлы, которые я также храню в ~ / bin /. (ls ~/bin/|wc -l = 428) Я положил туда много чего;) – Joey1978 24 January 2011 в 12:01
  • 3
    Представьте, что вы пишете сценарий для достижения конкретной задачи. Тогда вы понимаете, что писать этот сценарий в python сделает его намного более эффективным, поэтому вы переписываете его в python. Теперь у вас есть два варианта. 1) Оставьте теперь очень вводящее в заблуждение расширение .sh, или 2) переименуйте скрипт и выполните поиск и замените все использование сценария на использование нового имени. Если вы посмотрите на скрипты в /bin и /usr/bin, вы увидите, что они не используют расширения. – geirha 2 February 2011 в 12:49

Разница, которую вы делаете,

с sh, вы запускаете программу, которая будет интерпретировать строки в вашем скрипте так же, как вы бы набрали их в интерактивной подсказке терминала , с ./ вы делаете ярлык, предполагая, что скрипт находится прямо здесь, в текущем каталоге, в котором вы сидите. И он будет исполняемым (потому что, например, вы выпустили chmod +x myscript.sh), экономя ваше бесценное время на будущее раз :-)
3
ответ дан 4 August 2018 в 20:04
  • 1
    +1 для того, чтобы быть единственным, чтобы кратко указать, что файл должен быть исполняемым. – Mikel 4 February 2011 в 02:04

Есть три основные причины, по которым вы можете получить сообщение об ошибке:

файл не является исполняемым запустите chmod +x <myscriptname.sh>, чтобы исправить, что раздел не позволяет запускать скрипты (установлен «noexec») скопируйте скрипт на /usr/local/bin, строка #! имеет ошибку, убедитесь, что первая строка - #!/bin/sh или #!/bin/bash

Если ваша первая строка выглядит правильно, но все еще не работает, сделайте убедитесь, что файл не имеет окончаний строки DOS.

Ошибка будет выглядеть примерно так:

$ ./myscript.sh bash: ./myscript.sh: /bin/bash^M: bad interpreter: No such file or directory

Вы можете исправить это, запустив dos2unix <myscriptname.sh>, или если вы это есть, perl -p -i -e 's/\r\n$/\n/' <myscriptname.sh>.

3
ответ дан 4 August 2018 в 20:04

И ответ заключается в том, что sh - это имя для очень популярной оболочки. Но устарели и заменены другими. В настоящее время sh связан с другими оболочками, установленными на машине. например У меня есть баш. Запуск любой оболочки из sh обычно запускает некоторый режим совместимости с оригинальным поведением «оболочки».

Так что решение довольно простое. Посмотрите, что находится за командой sh (ls -al / bin / sh), и поставьте #! / Bin / whatever_you_find_there в качестве первой строки (или если что-то подобное в вашем скрипте отредактирует).

И, альтернативно, может возникнуть ошибка в самом скрипте. Подобно зависимости, которую выполняет sh, но не интерпретатор, который фактически используется.

0
ответ дан 4 August 2018 в 20:04

Короткий вариант:

sh - интерпретатор командной строки (тире) .Running sh my_script делает черту интерпретацией скрипта. ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #!/bin/bash или даже #!/bin/ruby (как показано на ruby my_script).
34
ответ дан 4 August 2018 в 20:04
  mkdir ~ / bin;  cp myscript.sh ~ / bin / echo "export PATH =" $ PATH: / home / $ USER / bin "& gt; ~ / .profile; source ~ / .profile;  

Не / usr / sbin , это для несущественных административных инструментов, / usr / local / bin - лучший выбор, если вы не хотите иметь ~ / bin / , но избегать sudo как можно больше.

0
ответ дан 6 August 2018 в 04:05

Разница, которую вы делаете,

  • с sh , вы запускаете программу, которая будет интерпретировать строки в вашем скрипте так же, как вы бы набрали их в интерактивной подсказке терминала,
  • с ./ , вы делаете ярлык, предполагая, что скрипт находится прямо здесь, в текущем каталоге, в котором вы сидите в И он будет исполняться (потому что, например, вы выпустили chmod + x myscript.sh ), сохраняя бесценное время для будущих времен: -)
3
ответ дан 6 August 2018 в 04:05

Есть три основные причины, по которым вы можете получить сообщение об ошибке:

  • файл не является исполняемым запустите chmod + x & lt; myscriptname.sh & gt; , чтобы исправить это
  • раздел не позволяет запускать скрипты (монтируется « noexec ») копирует сценарий на / usr / local / bin
  • строка #! имеет ошибку, убедитесь, что первая строка - #! / bin / sh или #! / bin / bash [ ! d11]

Если ваша первая строка выглядит правильно, но все еще не работает, убедитесь, что файл не имеет окончаний строки DOS.

Ошибка будет выглядеть примерно так: :

  $ ./myscript.sh bash: ./myscript.sh: / bin / bash ^ M: плохой интерпретатор: нет такого файла или каталога  

Вы можете исправить это, запустив dos2unix & lt; myscriptname.sh & gt; , или если у вас этого нет, perl -p -i -e 's / \r \n $ / \n / '& lt; myscriptname.sh & gt; .

3
ответ дан 6 August 2018 в 04:05

И ответ заключается в том, что sh - это имя для очень популярной оболочки. Но устарели и заменены другими. В настоящее время sh связан с другими оболочками, установленными на машине. например У меня есть баш. Запуск любой оболочки из sh обычно запускает некоторый режим совместимости с оригинальным поведением «оболочки».

Так что решение довольно простое. Посмотрите, что находится за командой sh (ls -al / bin / sh), и поставьте #! / Bin / whatever_you_find_there в качестве первой строки (или если что-то подобное в вашем скрипте отредактирует).

И, альтернативно, может возникнуть ошибка в самом скрипте. Подобно зависимости, которую выполняет sh, но не интерпретатор, который фактически используется.

0
ответ дан 6 August 2018 в 04:05

Короткий вариант:

  • sh - интерпретатор командной строки (тире) .Running sh my_script заставляет интерпретировать скрипт.
  • ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #! / bin / bash или даже #! / bin / ruby ​​ (как показано на выполнение ruby ​​my_script ).
  • [ ! d9]
34
ответ дан 6 August 2018 в 04:05
  mkdir ~ / bin;  cp myscript.sh ~ / bin / echo "export PATH =" $ PATH: / home / $ USER / bin "& gt; ~ / .profile; source ~ / .profile;  

Не / usr / sbin , это для несущественных административных инструментов, / usr / local / bin - лучший выбор, если вы не хотите иметь ~ / bin / , но избегать sudo как можно больше.

0
ответ дан 7 August 2018 в 22:05

Разница, которую вы делаете,

  • с sh , вы запускаете программу, которая будет интерпретировать строки в вашем скрипте так же, как вы бы набрали их в интерактивной подсказке терминала,
  • с ./ , вы делаете ярлык, предполагая, что скрипт находится прямо здесь, в текущем каталоге, в котором вы сидите в И он будет исполняться (потому что, например, вы выпустили chmod + x myscript.sh ), сохраняя бесценное время для будущих времен: -)
3
ответ дан 7 August 2018 в 22:05

Есть три основные причины, по которым вы можете получить сообщение об ошибке:

  • файл не является исполняемым запустите chmod + x & lt; myscriptname.sh & gt; , чтобы исправить это
  • раздел не позволяет запускать скрипты (монтируется « noexec ») копирует сценарий на / usr / local / bin
  • строка #! имеет ошибку, убедитесь, что первая строка - #! / bin / sh или #! / bin / bash [ ! d11]

Если ваша первая строка выглядит правильно, но все еще не работает, убедитесь, что файл не имеет окончаний строки DOS.

Ошибка будет выглядеть примерно так: :

  $ ./myscript.sh bash: ./myscript.sh: / bin / bash ^ M: плохой интерпретатор: нет такого файла или каталога  

Вы можете исправить это, запустив dos2unix & lt; myscriptname.sh & gt; , или если у вас этого нет, perl -p -i -e 's / \r \n $ / \n / '& lt; myscriptname.sh & gt; .

3
ответ дан 7 August 2018 в 22:05

И ответ заключается в том, что sh - это имя для очень популярной оболочки. Но устарели и заменены другими. В настоящее время sh связан с другими оболочками, установленными на машине. например У меня есть баш. Запуск любой оболочки из sh обычно запускает некоторый режим совместимости с оригинальным поведением «оболочки».

Так что решение довольно простое. Посмотрите, что находится за командой sh (ls -al / bin / sh), и поставьте #! / Bin / whatever_you_find_there в качестве первой строки (или если что-то подобное в вашем скрипте отредактирует).

И, альтернативно, может возникнуть ошибка в самом скрипте. Подобно зависимости, которую выполняет sh, но не интерпретатор, который фактически используется.

0
ответ дан 7 August 2018 в 22:05

Короткий вариант:

  • sh - интерпретатор командной строки (тире) .Running sh my_script заставляет интерпретировать скрипт.
  • ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #! / bin / bash или даже #! / bin / ruby ​​ (как показано на выполнение ruby ​​my_script ).
  • [ ! d9]
34
ответ дан 7 August 2018 в 22:05
  mkdir ~ / bin;  cp myscript.sh ~ / bin / echo "export PATH =" $ PATH: / home / $ USER / bin "& gt; ~ / .profile; source ~ / .profile;  

Не / usr / sbin , это для несущественных административных инструментов, / usr / local / bin - лучший выбор, если вы не хотите иметь ~ / bin / , но избегать sudo как можно больше.

0
ответ дан 10 August 2018 в 10:19

Разница, которую вы делаете,

  • с sh , вы запускаете программу, которая будет интерпретировать строки в вашем скрипте так же, как вы бы набрали их в интерактивной подсказке терминала,
  • с ./ , вы делаете ярлык, предполагая, что скрипт находится прямо здесь, в текущем каталоге, в котором вы сидите в И он будет исполняться (потому что, например, вы выпустили chmod + x myscript.sh ), сохраняя бесценное время для будущих времен: -)
3
ответ дан 10 August 2018 в 10:19

Есть три основные причины, по которым вы можете получить сообщение об ошибке:

  • файл не является исполняемым запустите chmod + x & lt; myscriptname.sh & gt; , чтобы исправить это
  • раздел не позволяет запускать скрипты (монтируется « noexec ») копирует сценарий на / usr / local / bin
  • строка #! имеет ошибку, убедитесь, что первая строка - #! / bin / sh или #! / bin / bash [ ! d11]

Если ваша первая строка выглядит правильно, но все еще не работает, убедитесь, что файл не имеет окончаний строки DOS.

Ошибка будет выглядеть примерно так: :

  $ ./myscript.sh bash: ./myscript.sh: / bin / bash ^ M: плохой интерпретатор: нет такого файла или каталога  

Вы можете исправить это, запустив dos2unix & lt; myscriptname.sh & gt; , или если у вас этого нет, perl -p -i -e 's / \r \n $ / \n / '& lt; myscriptname.sh & gt; .

3
ответ дан 10 August 2018 в 10:19

И ответ заключается в том, что sh - это имя для очень популярной оболочки. Но устарели и заменены другими. В настоящее время sh связан с другими оболочками, установленными на машине. например У меня есть баш. Запуск любой оболочки из sh обычно запускает некоторый режим совместимости с оригинальным поведением «оболочки».

Так что решение довольно простое. Посмотрите, что находится за командой sh (ls -al / bin / sh), и поставьте #! / Bin / whatever_you_find_there в качестве первой строки (или если что-то подобное в вашем скрипте отредактирует).

И, альтернативно, может возникнуть ошибка в самом скрипте. Подобно зависимости, которую выполняет sh, но не интерпретатор, который фактически используется.

0
ответ дан 10 August 2018 в 10:19

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

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