suコマンドでこのスクリプトI / Oリダイレクトを使用します。

suコマンドでこのスクリプトI / Oリダイレクトを使用します。

これは私のスクリプトです。他のユーザーとしてログインして次のことをしたいと思います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

コードにはいくつかの問題があります。

  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他のユーザーが特定のコマンドにパスワードなしでアクセスできるように構成できるようにする必要があります。

  2. 動作してもsu新しいプロセスが作成されます。コマンドが実行される前にsuコマンドが終了し、元のアカウントに返されましたls。だからあなたが本当に欲しいものは:

    su - testuser <<EOF
    ls -lih
    EOF
    

おすすめ記事