Сценарии Bash не будут работать без ввода & ldquo; bash & rdquo; перед ней

Поскольку код в ветке разработки SVN часто может быть разбит, у вас есть 2 варианта: Проверьте более старую ревизию репо SVN: svn checkout -r REVISION_NUMBER http://whatever/the/repo/is, где REVISION_NUMBER рабочая ревизия. Исправьте его - если вы знаете C, это может быть тривиально. Обновите извлеченную копию снова - возможно, она уже исправлена!

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

27 ответов

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

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

17
ответ дан 25 May 2018 в 23:03
  • 1
    Поэтому мне придется запускать его так: ./script, как я обнаружил. Это лучше, чем необходимость набирать «bash». каждый раз, и это имеет смысл. Кажется, я знал это раньше, это просто проскользнуло. Ну, спасибо, спасибо! – muttley91 10 February 2011 в 21:25
  • 2
    Теоретически вы можете поместить текущий рабочий каталог в переменную PATH, чтобы вы могли использовать только «скрипт». вместо "./ script " но я предупреждаю вас: это действительно не привычка к 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
ответ дан 25 July 2018 в 22: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
ответ дан 31 July 2018 в 10:54
Убедитесь, что вы запускаете скрипт с помощью ./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 в 03:56
Убедитесь, что вы запускаете скрипт с помощью ./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
ответ дан 4 August 2018 в 20:00
Убедитесь, что вы запускаете скрипт с помощью ./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 в 04:01
Убедитесь, что вы запускаете скрипт с помощью ./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
ответ дан 7 August 2018 в 22:00
  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
ответ дан 10 August 2018 в 10:14
  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
ответ дан 13 August 2018 в 16:37
  • 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
ответ дан 25 May 2018 в 23: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
ответ дан 25 May 2018 в 23:03

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

#!/bin/bash

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

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

4
ответ дан 25 July 2018 в 22:30
  • 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
ответ дан 25 July 2018 в 22:30
  • 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 в 10:54
  • 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 в 10:54
  • 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 в 03:56
  • 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 в 03:56
  • 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
ответ дан 4 August 2018 в 20: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
ответ дан 4 August 2018 в 20: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
ответ дан 6 August 2018 в 04:01
  • 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 в 04:01
  • 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
ответ дан 7 August 2018 в 22: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
ответ дан 7 August 2018 в 22:00
  • 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
ответ дан 10 August 2018 в 10:14

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

  #! / bin / bash  

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

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

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

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

  PATH = ".: $ PATH"  

или

  PATH = "$ PATH :."   

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

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

Файл: ls

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

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

0
ответ дан 13 August 2018 в 16:37
  • 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
ответ дан 13 August 2018 в 16:37
  • 1
    Нет, я все равно решил, что это просто по привычке. – muttley91 10 February 2011 в 19:24

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

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