Было бы лучше, если бы скрипты PowerShell также имели шебанг?

Если вы сделаете обычный ls -l, то увидите, что это ссылки на блочные устройства.

% ls -l /dev/block/
total 0
lrwxrwxrwx 1 root root 6 May  5 09:03 253:0 ->../vda
lrwxrwxrwx 1 root root 7 May  5 09:03 253:1 ->../vda1
lrwxrwxrwx 1 root root 6 May  5 09:03 253:16 ->../vdb
lrwxrwxrwx 1 root root 7 May  5 09:03 253:2 ->../vda2
lrwxrwxrwx 1 root root 7 May  5 09:03 253:3 ->../vda3
lrwxrwxrwx 1 root root 6 May  5 09:03 253:32 ->../vdc
lrwxrwxrwx 1 root root 7 May  5 09:03 253:33 ->../vdc1

Если вместо этого вы выполните ls -lL, то увидите сведения о цели

% ls -lL /dev/block/
total 0
brw-rw---- 1 root disk 253,  0 May  5 09:03 253:0
brw-rw---- 1 root disk 253,  1 May  5 09:03 253:1
brw-rw---- 1 root disk 253, 16 May  5 09:03 253:16
brw-rw---- 1 root disk 253,  2 May  5 09:03 253:2
brw-rw---- 1 root disk 253,  3 May  5 09:03 253:3
brw-rw---- 1 root disk 253, 32 May  5 09:03 253:32
brw-rw---- 1 root disk 253, 33 May  5 09:03 253:33

Отсюда очевидно, что значения x :y в имени файла являются старшим/младшим номером устройства.

См. также Что означают номера типов устройств?

0
25.03.2021, 17:27
2 ответа

Сценарии PowerShell в основном запускаются под Windows, и эта ОС обращает внимание на расширение всех файлов, кроме .exe, .com, .cmd, .bat, которые выполняются напрямую. В Windows также нет концепции исполняемых файлов -, так называемого «исполняемого» бита в ОС Unix.

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

Do you think it would be best for PowerShell scripts to also have a shebang?

Для машин с Windows в этом нет никакого смысла, для машин с Linux это имеет смысл. В конце концов, решать вам. Добавление PS shebang не повредит, поэтому вы можете добавить его во все свои сценарии, только я не знал, что люди используют PS под Linux.

2
28.04.2021, 22:55

Когда вы запускаете исполняемый скрипт в системах, производных от UNIX/Linux, ядро ​​(или иногда оболочка )ищет в первой строке маркер#!(shebang ), указывающий имя интерпретатора. использовать.

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

Например,

bash somescript         # user calls bash explicitly to run the script

против

chmod a+x somescript    # make executable
head -n1 somescript     # show the first line
#!/bin/bash

./somescript            # the script itself defines bash to execute it

То же самое может относиться к любому интерпретатору, а не только к стандартной оболочке. Таким образом, вы можете иметь #!/bin/awk, #!/usr/bin/perlи т. д.

Точно так же нет причин, по которым вы не должны иметь #!/usr/local/bin/pwshпри условии, что интерпретатор может выполнять код, прочитанный из stdin . Это то, что я хотел бы сделать.

2
28.04.2021, 22:55

Теги

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