これは私のスクリプトです。他のユーザーとしてログインして次のことをしたいと思いますls -lih
。
#!/bin/bash
su - testuser <<- _EOF_
123456 #password
_EOF_
ls -lih
スクリプト実行時の出力は次のとおりです。
./script.sh
-bash: line 1: 123456: command not found
total 127M
262210 drwxr-xr-x. 9 mazimi mazimi 156K Feb 14 19:05 Desktop
262211 drwxr-xr-x. 2 mazimi mazimi 36K Feb 14 18:26 Downloads
278106 -rw-r--r-- 1 mazimi mazimi 64K Feb 14 22:30 ems.cfg
... # list of files
私のホームディレクトリにありませls -lih
んかtestuser
?どうすれば修正できますか?
答え1
コードにはいくつかの問題があります。
su
パスワードは で読むのでは/dev/tty
なく で読み込まれるstdin
ので、このようにパスワードをリダイレクトすることはできません。実際、su
デフォルトはターゲットユーザーとしてシェルを起動することなので、次のコマンドを実行すると次のようになりますroot
。su - testuser <<- _EOF_ 123456 #password _EOF_
成功します
su
(ルートはこれを行うためにパスワードを必要としません)。しかし、123456
ユーザーシェルに入力として渡されます。したがって、スクリプトを実行すると、次の内容が表示されます。-bash: line 1: 123456: command not found
root以外のユーザーとしてこれを行うには、bahamtのアドバイスに従い、
sudo
他のユーザーが特定のコマンドにパスワードなしでアクセスできるように構成できるようにする必要があります。動作しても
su
新しいプロセスが作成されます。コマンドが実行される前にsu
コマンドが終了し、元のアカウントに返されましたls
。だからあなたが本当に欲しいものは:su - testuser <<EOF ls -lih EOF
答え2
私の考えでは、あなたはそれを修正することができないことを知っていると思います。私の考えにはパスワードがsu
読み込まれたようですが/dev/tty
、実際に該当魔法デバイスファイルにリダイレクトすることはできないと思います。
Linuxを使用している場合は、su
読み取りコンテンツを使用してパスワードを確認できますstrace
。
答え3
あなたが本当に使用したいことはですsudo
。
あなたは始めたいと思うかもしれませんここ。