Технически все работает так, как должно быть. Когда вы бежите
./foo.sh
Вы запускаете программу foo.sh (С помощью shebang)
Но когда ты бежишь
bash foo.sh
технически вы используете программу bash (/bin/bash или /usr/bin/bash ).
Если вы беспокоитесь о безопасности. Представьте, что пользователь имеет доступ для чтения foo.sh
и копирует содержимое foo.sh в bar.sh
, которое у него есть execute access
. Таким образом, во всех случаях, если пользователь может читать .sh
файлы, он может легко их выполнить.
Попробуйте открыть терминал и нажмите
gnome-terminal --help-all
что намекает вам (среди прочего )на опцию -e:
Terminal options; if used before the first --window or --tab argument, sets the default for all terminals: -e, --command Execute the argument to this option inside the terminal
что полностью вводит в заблуждение :(, потому что если вы сделаете это, вы получите:
Option “-e” is deprecated and might be removed in a later version of gnome-terminal. Use “-- ” to terminate the options and put the command line to execute after it.
Итак, перечитав это дважды, задаваясь вопросом, почему это не работает, и понимая, что если ваша команда завершает работу, терминал также отключается, а затем усиливая свой «эхо-тест» с помощью «exec bash», у вас есть хороший ответ для unix..stackexchange.com.. или вы на это надеетесь:)
gnome-terminal --window -- /bin/sh -c "echo This line is opening a gnome-terminal, running a command in it and then handing over to bash;exec bash"
И с
gnome-terminal --window -- /bin/sh -c "jupyter notebook"
в качестве команды я смог запустить блокнот Jupyter на Fedora 31 с помощью специальной комбинации клавиш.