Есть ли sh
команда linux использует текущую оболочку пользователя, даже если она не bash
? Например, предположим, что пользователь bob запускает csh. Если я создам сценарий с функциями и csh и попробую выполнить его с помощью:
sh cshtestscript
Будет ли это работать с csh?
Затем предположим, что другое использование Джо использует bash. Если я создам другой сценарий с функциями и сценарием bash и попытаюсь выполнить его с помощью:
sh bashtestscript
Будет ли это работать с bash?
sh
это просто стандартный исполняемый файл, который всегда является определенной оболочкой. Нет никакого волшебства, чтобы определить, какую оболочку использовать.
% whereis sh
sh: /bin/sh
% ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash
В системах Ubuntu /bin/sh
является (по умолчанию) символической ссылкой на рывок, которая представляет собой минимальную оболочку POSIX, предназначенную для неинтерактивного использования. Если ты бежишь sh cshtestscript
в системе Ubuntu он попытается запустить сценарий с тире.
Правильный способ справиться с этим - добавить Shebang к сценарию, который указывает, какую оболочку использовать, сделать сценарий исполняемым и всегда выполнять его как ./cshtestscript
.
#!/bin/csh