Почему система не подкачивается?

ОБНОВЛЕНИЕ: вопрос был сильно изменен, поэтому должен быть мой ответ.
Хотя я не нашел стандарта, определяющего, что считается «скриптом», вероятно, даже просто файл со списком команд является «скриптом», если он выполняется оболочкой. Таким образом, следует быть осторожным, так как если в верхней части скрипта не указана оболочка, предполагается поведение по умолчанию (sh).
СТАРЫЙ ОТВЕТ:
Если shне является bash в текущей системе, сценарий должен дать сбой, потому что башизмы не будут поняты.
Проведем эксперимент!

~/Downloads/test$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4  8月 31  2016 /bin/sh -> dash

Прежде всего, убедитесь, что shне является bash.
bash.shбудет использовать bash. Он вызывает другой скрипт bash, используя sudo.

:~/Downloads/test$ cat bash.sh 
#!/bin/bash

sudo ./sudo_bash.sh

dash.sh— скрипт dash, он показывает, что ((i++))башизм должен потерпеть неудачу согласно вашим словам.

:~/Downloads/test$ cat dash.sh 
#!/bin/sh

i=0
((i++))
echo $i

Давайте подтвердим это

:~/Downloads/test$ ./dash.sh 
./dash.sh: 4: ./dash.sh: i++: not found
0
:~/Downloads/test$ 

Красиво провалился. Итак, sudo_bash.sh— это сценарий bash. Мы выполним его из bash.sh с помощью команды sudo, и, как вы сказали, если он действительно разветвлен с помощью sh, то он тоже должен потерпеть неудачу.

:~/Downloads/test$ cat sudo_bash.sh 
#!/bin/bash

i=0
((i++))
echo $i

:~/Downloads/test$ ./bash.sh 
[sudo] password for cs-server: 
1
:~/Downloads/test$

Выполнено успешно. Это доказывает, что новая среда не использует /bin/sh.

I'd like to know why sudo uses sh as default.  

Исторически первой оболочкой была sh, поэтому название сохранено по соображениям совместимости.

Is it so that it can be configured to other shells?

Конечно, просто измените символическую ссылку вашего sh

:~/Downloads/test$ cat text_file 
i=0
((i++))
echo $i
:~/Downloads/test$ chmod +x text_file 
:~/Downloads/test$ sudo ln -sf bash /bin/sh
:~/Downloads/test$ sudo ./text_file
1
:~/Downloads/test$ sudo ln -sf dash /bin/sh
:~/Downloads/test$ sudo ./text_file
./text_file: 2: ./text_file: i++: not found
0
0
25.08.2016, 14:02
0 ответов

Теги

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