В чем разница между ./ и 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» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет программу-интерпретатор, указанную и загрузив содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

#!/bin/bash
# bash script here

Линия звонка - это первая строка в скрипте и начинается с тех же двух символов #!, это то, что система считывает, когда пытается выполнить скрипт, а затем система передает сценарий программе сразу после. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы бы использовали #!/usr/bin/python, а затем следуете за ним с помощью кода python.

После того, как у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение:

chmod a+x filename.sh

Тогда вы можете запустите скрипт как свой собственный процесс:

./filename.sh

Или поместите файл в известное место с хорошим именем программы, например /usr/sbin и запустите из любого места:

sudo cp filename.sh /usr/sbin/program-name
program-name
[d8 ] И это действительно очень первая строка дает преимущество использования строки bang с правильными разрешениями - все дело в развертывании. Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставляя его в /usr/local/bin и делая его исполняемым, можно сэкономить много горя для людей, пытающихся использовать ваш скрипт. Эти программы становятся доступными для всех пользователей вашего компьютера.

Это также хорошо для идентификации. Если вы заходите в программу top, сценарий, запущенный без линии привязки, будет просто иметь имя интерпретатора, то есть bash, perl или python. Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

59
ответ дан 25 May 2018 в 23:20
  • 1
    Вы также можете использовать личную папку bin: создайте папку bin в вашей домашней папке и войдите в систему, и затем вы сможете запускать любые скрипты в этой папке без sh или ./. – papukaija 23 January 2011 в 20:46
  • 2
    Конечно, но добавление вашей домашней папки в ваш PATH может показаться немного головной болью. Лучше установите все. Хотя были некоторые разговоры о добавлении ~ / .local / bin в путь по умолчанию, чтобы разрешить локальные установки пользователей пакетов. – Martin Owens -doctormo- 23 January 2011 в 21:28
  • 3
    Обратите внимание, что интерпретатор по умолчанию - bash, а не sh. – Nathan Osman 24 January 2011 в 06:13
  • 4
    Не помещайте расширения в скрипты, особенно если вы не помещаете их в PATH. – geirha 24 January 2011 в 11:46
  • 5
    Для нуба, подобного мне ... не могли бы вы объяснить ПРАКТИЧЕСКИЕ различия между обеими ситуациями? Другими словами ... что я могу сделать с помощью одного метода, который я не могу с другим, и наоборот? – luri 24 January 2011 в 13:03

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет программу-интерпретатор, указанную и загрузив содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

#!/bin/bash # bash script here

Линия звонка - это первая строка в скрипте и начинается с тех же двух символов #!, это то, что система считывает, когда пытается выполнить скрипт, а затем система передает сценарий программе сразу после. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы бы использовали #!/usr/bin/python, а затем следуете за ним с помощью кода python.

Как только у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение:

chmod a+x filename.sh

Затем вы можете запустите скрипт как свой собственный процесс:

./filename.sh

Или поместите файл в известное место с хорошим именем программы, например /usr/sbin и запустите из любого места:

sudo cp filename.sh /usr/sbin/program-name program-name

И это действительно очень первая строка дает преимущество использования строки bang с правильными разрешениями - все дело в развертывании. Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставляя его в /usr/local/bin и делая его исполняемым, можно сэкономить много горя для людей, пытающихся использовать ваш скрипт. Эти программы становятся доступными для всех пользователей вашего компьютера.

Это также хорошо для идентификации. Если вы заходите в программу top, сценарий, запущенный без линии привязки, будет просто иметь имя интерпретатора, то есть bash, perl или python. Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

60
ответ дан 25 July 2018 в 22:35

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет программу-интерпретатор, указанную и загрузив содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

#!/bin/bash # bash script here

Линия звонка - это первая строка в скрипте и начинается с тех же двух символов #!, это то, что система считывает, когда пытается выполнить скрипт, а затем система передает сценарий программе сразу после. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы бы использовали #!/usr/bin/python, а затем следуете за ним с помощью кода python.

Как только у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение:

chmod a+x filename.sh

Затем вы можете запустите скрипт как свой собственный процесс:

./filename.sh

Или поместите файл в известное место с хорошим именем программы, например /usr/sbin и запустите из любого места:

sudo cp filename.sh /usr/sbin/program-name program-name

И это действительно очень первая строка дает преимущество использования строки bang с правильными разрешениями - все дело в развертывании. Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставляя его в /usr/local/bin и делая его исполняемым, можно сэкономить много горя для людей, пытающихся использовать ваш скрипт. Эти программы становятся доступными для всех пользователей вашего компьютера.

Это также хорошо для идентификации. Если вы заходите в программу top, сценарий, запущенный без линии привязки, будет просто иметь имя интерпретатора, то есть bash, perl или python. Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

60
ответ дан 26 July 2018 в 22:45

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет программу-интерпретатор, указанную и загрузив содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

#!/bin/bash # bash script here

Линия звонка - это первая строка в скрипте и начинается с тех же двух символов #!, это то, что система считывает, когда пытается выполнить скрипт, а затем система передает сценарий программе сразу после. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы бы использовали #!/usr/bin/python, а затем следуете за ним с помощью кода python.

Как только у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение:

chmod a+x filename.sh

Затем вы можете запустите скрипт как свой собственный процесс:

./filename.sh

Или поместите файл в известное место с хорошим именем программы, например /usr/sbin и запустите из любого места:

sudo cp filename.sh /usr/sbin/program-name program-name

И это действительно очень первая строка дает преимущество использования строки bang с правильными разрешениями - все дело в развертывании. Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставляя его в /usr/local/bin и делая его исполняемым, можно сэкономить много горя для людей, пытающихся использовать ваш скрипт. Эти программы становятся доступными для всех пользователей вашего компьютера.

Это также хорошо для идентификации. Если вы заходите в программу top, сценарий, запущенный без линии привязки, будет просто иметь имя интерпретатора, то есть bash, perl или python. Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

60
ответ дан 31 July 2018 в 10:28

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет программу-интерпретатор, указанную и загрузив содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

#!/bin/bash # bash script here

Линия звонка - это первая строка в скрипте и начинается с тех же двух символов #!, это то, что система считывает, когда пытается выполнить скрипт, а затем система передает сценарий программе сразу после. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы бы использовали #!/usr/bin/python, а затем следуете за ним с помощью кода python.

Как только у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение:

chmod a+x filename.sh

Затем вы можете запустите скрипт как свой собственный процесс:

./filename.sh

Или поместите файл в известное место с хорошим именем программы, например /usr/sbin и запустите из любого места:

sudo cp filename.sh /usr/sbin/program-name program-name

И это действительно очень первая строка дает преимущество использования строки bang с правильными разрешениями - все дело в развертывании. Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставляя его в /usr/local/bin и делая его исполняемым, можно сэкономить много горя для людей, пытающихся использовать ваш скрипт. Эти программы становятся доступными для всех пользователей вашего компьютера.

Это также хорошо для идентификации. Если вы заходите в программу top, сценарий, запущенный без линии привязки, будет просто иметь имя интерпретатора, то есть bash, perl или python. Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

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

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет программу-интерпретатор, указанную и загрузив содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

#!/bin/bash # bash script here

Линия звонка - это первая строка в скрипте и начинается с тех же двух символов #!, это то, что система считывает, когда пытается выполнить скрипт, а затем система передает сценарий программе сразу после. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы бы использовали #!/usr/bin/python, а затем следуете за ним с помощью кода python.

Как только у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение:

chmod a+x filename.sh

Затем вы можете запустите скрипт как свой собственный процесс:

./filename.sh

Или поместите файл в известное место с хорошим именем программы, например /usr/sbin и запустите из любого места:

sudo cp filename.sh /usr/sbin/program-name program-name

И это действительно очень первая строка дает преимущество использования строки bang с правильными разрешениями - все дело в развертывании. Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставляя его в /usr/local/bin и делая его исполняемым, можно сэкономить много горя для людей, пытающихся использовать ваш скрипт. Эти программы становятся доступными для всех пользователей вашего компьютера.

Это также хорошо для идентификации. Если вы заходите в программу top, сценарий, запущенный без линии привязки, будет просто иметь имя интерпретатора, то есть bash, perl или python. Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

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

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет программу-интерпретатор, указанную и загрузив содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

#!/bin/bash # bash script here

Линия звонка - это первая строка в скрипте и начинается с тех же двух символов #!, это то, что система считывает, когда пытается выполнить скрипт, а затем система передает сценарий программе сразу после. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы бы использовали #!/usr/bin/python, а затем следуете за ним с помощью кода python.

После того, как у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение:

chmod a+x filename.sh

Тогда вы можете запустите скрипт как свой собственный процесс:

./filename.sh

Или поместите файл в известное место с хорошим именем программы, например /usr/sbin и запустите из любого места:

sudo cp filename.sh /usr/sbin/program-name program-name

И это действительно очень первая строка дает преимущество использования строки bang с правильными разрешениями - все дело в развертывании. Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставляя его в /usr/local/bin и делая его исполняемым, можно сэкономить много горя для людей, пытающихся использовать ваш скрипт. Эти программы становятся доступными для всех пользователей вашего компьютера.

Это также хорошо для идентификации. Если вы заходите в программу top, сценарий, запущенный без линии привязки, будет просто иметь имя интерпретатора, то есть bash, perl или python. Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

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

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет указанную программу интерпретатора и загрузит содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

  #! / Bin / bash #  bash script здесь  

Линия звонка - это самая первая строка в скрипте и начинается с тех же двух символов #! , это то, что система читает, когда она пытается выполнить скрипт, а затем система сразу же передает сценарий программе. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы должны использовать #! / Usr / bin / python , а затем следовать ему с помощью кода python.

После того, как у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение: [ ! d19]

  chmod a + x filename.sh  

Тогда вы можете запустить скрипт как свой собственный процесс:

  ./  filename.sh  

Или поместите файл в известное место с хорошим именем программы, например / usr / sbin и запустите из любого места:

  sudo cp filename.sh / usr / sbin / program-name имя_программы  

И это действительно практическое преимущество использования линии привязки с правильными разрешениями - это все о развертывании . Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставлять его в / usr / local / bin и делать его исполняемым, может сэкономить много горя для людей, пытающихся использовать ваш скрипт. Затем эти программы становятся доступными для всех пользователей на вашем компьютере.

Это также хорошо для идентификации. Если вы заходите в программу top , скрипт, запускаемый без строки привязки, будет просто иметь имя интерпретатора, то есть bash , perl или питона . Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

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

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет указанную программу интерпретатора и загрузит содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

  #! / Bin / bash #  bash script здесь  

Линия звонка - это самая первая строка в скрипте и начинается с тех же двух символов #! , это то, что система читает, когда она пытается выполнить скрипт, а затем система сразу же передает сценарий программе. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы должны использовать #! / Usr / bin / python , а затем следовать ему с помощью кода python.

После того, как у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение: [ ! d19]

  chmod a + x filename.sh  

Тогда вы можете запустить скрипт как свой собственный процесс:

  ./  filename.sh  

Или поместите файл в известное место с хорошим именем программы, например / usr / sbin и запустите из любого места:

  sudo cp filename.sh / usr / sbin / program-name имя_программы  

И это действительно практическое преимущество использования линии привязки с правильными разрешениями - это все о развертывании . Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставлять его в / usr / local / bin и делать его исполняемым, может сэкономить много горя для людей, пытающихся использовать ваш скрипт. Затем эти программы становятся доступными для всех пользователей на вашем компьютере.

Это также хорошо для идентификации. Если вы заходите в программу top , скрипт, запускаемый без строки привязки, будет просто иметь имя интерпретатора, то есть bash , perl или питона . Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

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

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет указанную программу интерпретатора и загрузит содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

  #! / Bin / bash #  bash script здесь  

Линия звонка - это самая первая строка в скрипте и начинается с тех же двух символов #! , это то, что система читает, когда она пытается выполнить скрипт, а затем система сразу же передает сценарий программе. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы должны использовать #! / Usr / bin / python , а затем следовать ему с помощью кода python.

После того, как у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение: [ ! d19]

  chmod a + x filename.sh  

Тогда вы можете запустить скрипт как свой собственный процесс:

  ./  filename.sh  

Или поместите файл в известное место с хорошим именем программы, например / usr / sbin и запустите из любого места:

  sudo cp filename.sh / usr / sbin / program-name имя_программы  

И это действительно практическое преимущество использования линии привязки с правильными разрешениями - это все о развертывании . Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставлять его в / usr / local / bin и делать его исполняемым, может сэкономить много горя для людей, пытающихся использовать ваш скрипт. Затем эти программы становятся доступными для всех пользователей на вашем компьютере.

Это также хорошо для идентификации. Если вы заходите в программу top , скрипт, запускаемый без строки привязки, будет просто иметь имя интерпретатора, то есть bash , perl или питона . Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

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

Когда вы запускаете любой скрипт, передавая имя файла программе интерпретатора скриптов, вы запускаете программу-интерпретатор со скриптом в качестве аргумента, переданного в него. Например, это будет выглядеть как «sh» с аргументом «filename.sh». Интерпретатор sh открывает файл.

С другой стороны, если вы запустите сам скрипт, система вызовет указанную программу интерпретатора и загрузит содержимое скриптов. В этом случае процесс выглядит как «filename.sh» без аргументов.

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

  #! / Bin / bash #  bash script здесь  

Линия звонка - это самая первая строка в скрипте и начинается с тех же двух символов #! , это то, что система читает, когда она пытается выполнить скрипт, а затем система сразу же передает сценарий программе. Обратите внимание, что эта строка не имеет ничего общего с bash и работает так же хорошо для python и perl, хотя они очень разные языки. Например, вы должны использовать #! / Usr / bin / python , а затем следовать ему с помощью кода python.

После того, как у вас есть сценарий, убедитесь, что вы установили разрешения на выполнение: [ ! d19]

  chmod a + x filename.sh  

Тогда вы можете запустить скрипт как свой собственный процесс:

  ./  filename.sh  

Или поместите файл в известное место с хорошим именем программы, например / usr / sbin и запустите из любого места:

  sudo cp filename.sh / usr / sbin / program-name имя_программы  

И это действительно практическое преимущество использования линии привязки с правильными разрешениями - это все о развертывании . Очень сложно заставить пользователей запускать скрипт, если им нужно помнить, в какую программу запускать скрипт. Не забудьте указать полный путь к скрипту каждый раз, когда они захотят его запустить. Где, например, вставлять его в / usr / local / bin и делать его исполняемым, может сэкономить много горя для людей, пытающихся использовать ваш скрипт. Затем эти программы становятся доступными для всех пользователей на вашем компьютере.

Это также хорошо для идентификации. Если вы заходите в программу top , скрипт, запускаемый без строки привязки, будет просто иметь имя интерпретатора, то есть bash , perl или питона . Но если скрипт запускается с правильными разрешениями, то появляется имя скрипта.

Примечание. Если вы хотите распространять скрипт, доступный для всех, создайте страницу руководства и пакет deb для его установки. Нам нужно уменьшить количество случайных скриптов в Интернете и увеличить количество deb, которые можно удалить.

60
ответ дан 13 August 2018 в 16:43
  • 1
    Вы также можете использовать личную папку bin: создайте папку bin в вашей домашней папке и войдите в систему, и затем вы сможете запускать любые скрипты в этой папке без sh или ./. – papukaija 23 January 2011 в 20:46
  • 2
    Конечно, но добавление вашей домашней папки в ваш PATH может показаться немного головной болью. Лучше установите все. Хотя были некоторые разговоры о добавлении ~ / .local / bin в путь по умолчанию, чтобы разрешить локальные установки пользователей пакетов. – Martin Owens -doctormo- 23 January 2011 в 21:28
  • 3
    Обратите внимание, что интерпретатор по умолчанию - bash , а не sh . – Nathan Osman 24 January 2011 в 06:13
  • 4
    Не ставьте расширения на скрипты, особенно если вы не поместите его в PATH . – geirha 24 January 2011 в 11:46
  • 5
    Для нуба, подобного мне ... не могли бы вы объяснить ПРАКТИЧЕСКИЕ различия между обеими ситуациями? Другими словами ... что я могу сделать с помощью одного метода, который я не могу с другим, и наоборот? – luri 24 January 2011 в 13:03
  • 6
    – glenn jackman 8 April 2011 в 01:02

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

sh - интерпретатор командной строки (тире) .Running sh my_script делает черту интерпретацией скрипта. ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #!/bin/bash или даже #!/bin/ruby (как показано на ruby my_script).
32
ответ дан 25 May 2018 в 23:20

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

файл не является исполняемым запустите 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
ответ дан 25 May 2018 в 23:20

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

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

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

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

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

0
ответ дан 25 May 2018 в 23:20
mkdir ~/bin ; cp myscript.sh ~/bin/

echo "export PATH="$PATH:/home/$USER/bin" >> ~/.profile ; source ~/.profile ; 

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

0
ответ дан 25 May 2018 в 23:20
  • 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
mkdir ~/bin ; cp myscript.sh ~/bin/ echo "export PATH="$PATH:/home/$USER/bin" >> ~/.profile ; source ~/.profile ;

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

0
ответ дан 25 July 2018 в 22:35
  • 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
ответ дан 25 July 2018 в 22:35
  • 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
ответ дан 25 July 2018 в 22:35

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

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

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

0
ответ дан 25 July 2018 в 22:35

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

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

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

0
ответ дан 26 July 2018 в 22:45
  • 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
ответ дан 26 July 2018 в 22:45
  • 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
ответ дан 26 July 2018 в 22:45

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

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

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

0
ответ дан 26 July 2018 в 22:45

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

sh - интерпретатор командной строки (тире) .Running sh my_script делает черту интерпретацией скрипта. ./ пытается выяснить, какой интерпретатор использовать, посмотрев на первую строку. Например. #!/bin/bash или даже #!/bin/ruby (как показано на ruby my_script).
34
ответ дан 26 July 2018 в 22:45
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 в 10:28
  • 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 в 10:28
  • 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 в 10:28

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

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

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

0
ответ дан 31 July 2018 в 10:28

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

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