Сценарий Python не будет запускаться без предшествующего файла сценария в командной строке с помощью «python3». Ошибка: «команда не найдена» (18.04) [dубликат]

В нашей школьной системе мы можем запускать файлы сценариев без ввода bash или csh или того, что у вас нет, указывая, какой тип скрипта он есть. Однако на Ubuntu мне нужно ввести bash script.bash, например. Это всегда необходимо в Ubuntu, или это какая-то настройка, которую я могу изменить?

10
задан 10 February 2011 в 20:32

30 ответов

Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 23 July 2018 в 09:00
  • 1
    Поэтому мне придется запускать его так: ./script, как я обнаружил. Это лучше, чем необходимость набирать «bash». каждый раз, и это имеет смысл. Кажется, я знал это раньше, это просто проскользнуло. Ну, спасибо, спасибо! – muttley91 10 February 2011 в 21:25
  • 2
    Теоретически вы можете поместить текущий рабочий каталог в переменную PATH, чтобы вы могли использовать только «скрипт». вместо "./ script & quot; но я предупреждаю вас: это действительно не привычка к UNIX-системам, и это может быть проблема безопасности! Также в школе нехорошо учиться чему-то, что никогда не было решением для UNIX-систем, поэтому я бы избегал этого решения ... – LGB 11 February 2011 в 12:26
  • 3
    Или, предпочтительно, #!/usr/bin/env bash, который немного более портативен. – Sparhawk 9 March 2014 в 20:46
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 23 July 2018 в 09:45
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 23 July 2018 в 09:49
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 31 July 2018 в 17:02
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 2 August 2018 в 10:03
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 3 August 2018 в 08:49
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 5 August 2018 в 00:07
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 6 August 2018 в 16:28
Убедитесь, что вы запускаете скрипт с помощью ./script или полного пути или чего-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, например /usr/bin), так как в системах UNIX это не привычка иметь текущий каталог на вашем пути (по соображениям безопасности, и это хорошо! ) Убедитесь, что сценарий выполним, например: chmod +x script сделает его исполняемым. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \ r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh был привязан к /bin/bash, но теперь-в-днях (насколько это возможно Я заметил), он символически связан с dash, который не обеспечит совместимость с bash, только POSIX sh. Это очень важно, даже довольно дорогое программное обеспечение в нашей фирме имеет эту проблему: скрипты содержат #!/bin/sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 8 August 2018 в 20:39
  1. Убедитесь, что вы запускаете скрипт с помощью ./ script или полного пути или чего-то еще. Сценарий может не работать (он работает, если каталог находится в $ PATH , например / usr / bin ), так как в системах UNIX это не
  2. Убедитесь, что сценарий является исполняемым, например: chmod + x script будет создан это исполняемый файл.
  3. Убедитесь, что у вас есть #! / bin / bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-либо редактора Windows, поскольку они часто используют «тип DOS» для eol (конец строки), который отличается от UNIX (если контрольный список выше в порядке, но вы получили «плохое» интерпретатор: нет такого файла или каталога "или так, даже если это / bin / bash, это часто является причиной, так как непечатаемый - так что вы обычно этого не видите - \r будет рассматриваться как часть путь переводчика)

Другие уже упомянули: важно использовать / bin / bash , если вы используете функции bash, также / bin / sh [ ! d7] был привязан к / bin / bash , но теперь-в-днях (насколько я заметил) он символически связан с тире , который не обеспечит совместимость с bash, только POSIX sh . Это очень важно, даже у довольно дорогого программного обеспечения у нашей фирмы есть эта проблема: скрипты содержат #! / Bin / sh в качестве первой строки, но также зависят от функциональности bash.

17
ответ дан 14 August 2018 в 10:27
  • 1
    Поэтому мне придется запускать его так: ./script, как я обнаружил. Это лучше, чем необходимость набирать «bash». каждый раз, и это имеет смысл. Кажется, я знал это раньше, это просто проскользнуло. Ну, спасибо, спасибо! – muttley91 10 February 2011 в 21:25
  • 2
    Теоретически вы можете поместить текущий рабочий каталог в переменную PATH, чтобы вы могли использовать только «скрипт». вместо "./ script & quot; но я предупреждаю вас: это действительно не привычка к UNIX-системам, и это может быть проблема безопасности! Также в школе нехорошо учиться чему-то, что никогда не было решением для UNIX-систем, поэтому я бы избегал этого решения ... – LGB 11 February 2011 в 12:26
  • 3
    Или, предпочтительно, #! / Usr / bin / env bash , который немного более портативен. – Sparhawk 9 March 2014 в 20:46

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 23 July 2018 в 09:00
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 23 July 2018 в 09:00
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 23 July 2018 в 09:45
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 23 July 2018 в 09:45
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 23 July 2018 в 09:49
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 23 July 2018 в 09:49
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 31 July 2018 в 17:02
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 31 July 2018 в 17:02
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 2 August 2018 в 10:03
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 2 August 2018 в 10:03
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 3 August 2018 в 08:49
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 3 August 2018 в 08:49
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 5 August 2018 в 00:07
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 5 August 2018 в 00:07
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 6 August 2018 в 16:28
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 6 August 2018 в 16:28
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

#!/bin/bash

Если shebang - #!/bin/sh, вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске как sh, отключив некоторые (но не все) функции bash.

Вам также нужно будет сделать конечно скрипт исполняемый, конечно.

4
ответ дан 8 August 2018 в 20:39
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

Альтернативный, сильно обескураженный способ добавляет . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

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

Рассмотрим следующее:

Файл: ls [ ! d5] #!/bin/bash ./my_malicious_script &>/dev/null /bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 8 August 2018 в 20:39
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo, например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед /bin. Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Альтернативным, сильно обескураженным способом является добавление . к PATH .

  PATH = ".: $ PATH"  

или

  PATH = "$ PATH :."   

Проблема с этим подходом заключается в том, что в первом случае любая системная команда может быть переопределена исполняемыми файлами из текущего каталога, а в последнем случае неизвестные команды все равно могут быть переопределены. [ ! d8]

Рассмотрим следующее:

Файл: ls

  #! / bin / bash ./my_malicious_script & amp; gt; / dev / null / bin /  ls "$ @"  

Скорее всего, вы даже не заметили бы, пока не стало слишком поздно.

0
ответ дан 14 August 2018 в 10:27
  • 1
    Выбор слов немного вводит в заблуждение. Команды не будут отменены. Если у вас есть команда в текущем рабочем каталоге, которая имеет то же имя, что и тот, кто живет в системных каталогах, скажем, echo , например, тот, который находится в вашем каталоге, будет использоваться просто потому, что этот каталог установлен в переменной PATH перед / bin . Shell просто ищет команды в определенных каталогах в зависимости от их порядка в PATH и не отменяет / не уничтожает ничего. Но да, это имеет последствия – Sergiy Kolodyazhnyy 22 July 2018 в 11:14

Убедитесь, что первая строка файла читается:

  #! / bin / bash  

Если shebang - #! / bin / sh , вы не должны использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если / bin / sh является символической ссылкой на bash , bash будет работать в режиме совместимости POSIX при запуске как sh, отключив некоторые (но не все) bash-функции. [ ! d5]

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

4
ответ дан 14 August 2018 в 10:27
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

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

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