Ubuntu 18.04.3 LTS(GNU/Linux 5.0.0-31-generic x86_64)
GNOMEシェル3.28.4
GNU bash、バージョン4.4.20(1)-release(x86_64-pc-linux-gnu)
通常、su - user
がターミナルで呼び出され、ユーザーがさらにコマンドを入力しますが、私の場合、ユーザーにログインする必要があるスクリプトと書いています(username@pcname:~$
すべての行の前、そのログインを呼び出すかどうかわからない)、次に通常入力されるコマンドを実行する
これらのコマンドはユーザーでSudo apt install
されており、各行の先頭にusername@pcname:~$
がない場合は機能しないため、これを行う必要があります。
-c
フラグがあることを知っています。しかし、私が知る限り、-c
フラグは、-su: MyCommand: command not found
を取得しているときにsu
の下でコマンドを実行するだけです。
su - Username -c "some_commands;some_other_commands"
Su-ユーザーはこれを達成する正しい方法ですか? (username@pcname:~$
)何が悪いのですか?
どんな助けでも大歓迎です:)
ちなみに、以前はこれを行うためのスクリプトの記述方法について尋ねていましたが、具体的で混乱しすぎているため、この問題に絞り込みます。
通常のユーザーデスクトップでSudo
を必要とするスクリプトを実行する必要がある場合、次のようなエントリを作成します。
次に、パス内にラッパースクリプトを記述して、Sudo
レベルに昇格させます。
$ cat /usr/local/bin/eyesome-cfg-desktop-wrapper.sh
#!/bin/bash
# NAME: eyesome-cfg-desktop-wrapper.sh
# PATH: /usr/local/bin
# DESC: Wrapper script to call `eyesome-cfg.sh`
# DATE: Sep 24, 2018. Modified June 6, 2019
# NOTE: Designed to be called from ~/Desktop/eyesome-cfg.desktop
# UPDT: 2019-06-06 Name change to reflect wrapper script.
PROGNAME="eyesome-cfg.sh"
tty -s;
if [[ "0" == "$?" ]]; then
echo "$PROGNAME cannot be called from background process."
exit 1
fi
if [[ $EUID != 0 ]]; then
# Get Sudo password
Password=$(zenity --password --title="Password for $PROGNAME")
encryptPassword=$(echo -n "$Password" | md5sum)
# After viewing encrypted password once, comment out line below.
# echo "md5sum: $encryptPassword"
# Set value in quotes below to encryped password revealed above.
if [[ "$encryptPassword" != "005e160c7bcfacf3d818d66e5856d75a -" ]]; then
echo "Invalid password!"
exit 1
fi
fi # non-terminals can't enter password.
# Call eyesome-cfg.sh with any parameters passed to this wrapper sript
if [[ $EUID == 0 ]]; then
Sudo "$PROGNAME" "$@" # Already running as Sudo.
else
echo $Password | Sudo -S "$PROGNAME" "$@"
fi
exit 0
スクリプトを初めて実行するときに、コメント(#
)この行:
# echo "md5sum: $encryptPassword"
次に、スクリプトは暗号化されたパスワードを表示します。暗号化されたパスワードを取得して、下に数行入力します。
if [[ "$encryptPassword" != "005e160c7bcfacf3d818d66e5856d75a -" ]]; then
もちろん、これはすべてオプションであり、暗号化をスキップし、パスワードを通常のテキストでスクリプトにコード化して、だれでも読むことができます。しかし、私はそれをしません...