Попробуйте сравнить окружение:
$ sudo -s
# diff <(su username -c env) <(sudo -u username bash -c env)
Например, окружение для sudo
управляется параметрами env_*
по умолчанию в /etc/sudoers
.
Скрипты оболочки очень похожи на команды, которые вы попадаете в типичном режиме в оболочке. В этом случае параметр -O
-O G ++
, где поставить двоичный. Таким образом, вы просто скажете это, вы хотите, чтобы в двоичном каталоге:
g++ lesson01.cpp -o Binary/lesson01
Вы можете запустить это интерактивно (набрав его в оболочку), или вы можете поставить, что в сценарии оболочки - оба сделают то же самое:
#!/bin/sh
g++ lesson01.cpp -o Binary/lesson01
Обычно, однако, вы бы использовали Makefile, чтобы делать такие вещи, а не скрипт оболочки.
all:
Binary/%: %.cpp
g++ -o "$@" "$<" # Note: this must be a tab, not spaces. Make is annoying like that
Тогда вы напечатаете сделать двоичный / урок01
и сделать компиляцию программы (если источник новее, чем существующий двоичный файл, или если двоичный не существует). Вы также можете перечислить все программы после этого Все:
вверху ( все: двоичный / урок01 двоичный / урок02
, и т. Д.) А затем просто набрать make
Составьте все программы по мере необходимости.
Вы также можете сделать более продвинутые вещи с помощью Sake или скрипта Shell (например, чтобы он определил список программ для компиляции, а не в списке их всех), но это более сложная.