Как запустить скрипт оболочки без sh или bash в подсистеме Windows для Linux?

Как запустить скрипт оболочки без sh или bash в подсистеме Windows для Linux?

Я запускаю Ubuntu с использованием WSL (подсистема Windows для Linux). Я написал простой скрипт оболочки ниже. При запуске он выдает следующую ошибку.

#! /bin/sh
# "test script"
echo "hello world"

test.sh: команда не найдена

Но он успешно запускается, если я запускаю команду using sh test.shили bash test.sh.

Так есть ли способ запустить его без shродного Linux?

решение1

Вы всегда можете запустить его как ./test.sh.

./разрешается в текущий каталог, заканчивающийся на /, поэтому вы фактически указываете полный путь к своему скрипту.

Just test.shбудет работать только если ваш текущий каталог находится в $PATH. Это не эксклюзивно для WSL.

решение2

Основы:

Первый:
Вы создаете скрипт с «шебангом» в первой строке, это определяет, какой именно скрипт, например bash, python или perl, понимает остальную часть текстового файла.

Обычно это выглядит так: #!/bin/bashили #!/bin/env pythonчто-то в этом роде

Второй:
Убедитесь, что файл имеет xфлаг - для выбора user, groupи/или others ( man chmodдля более подробной информации) с помощью, например,
chmod 755 script_filename

Третий:
Поместите его в папку (каталог) на вашем жестком диске, на любом постоянно подключенном носителе информации.
Это mkdir -p $HOME/bin/может быть хорошей идеей, для личных вещей.

Четвертое:
убедитесь, что папка указана в echo $PATH- например, добавив строку, содержащую
export PATH=$PATH:/absolute/path/to/folder/
в$HOME/.bash_aliases

После всего этого ваш скрипт станет доступным (исполняемым) -в недавно запущенной оболочке (для вступления в силу пункта 4)- введя только имя в командной строке bash.
(Примечание: WSL, по крайней мере в первой версии, является/была Ubuntu от Canonical)


Более детально:https://tldp.org/guides.html- в руководствах Bash

Связанный контент