suコマンドでcdコマンドを使用するには?

suコマンドでcdコマンドを使用するには?

以下のスクリプトでは、aserverとbserverが正しく機能しています。ただし、上記の「cserver」の場合、su - gsxuserp以降は同じユーザーを使用して次の3つのオプションを実行する必要があります。

cd ..
cd random_directory
tail -f file_in_random_directory

何もせずに接続が閉じられるため、-cオプションを使用してこれを実行することはできません。誰かがこれを行う基本的な方法を提案できますか?

echo "Please type one of the following: aserver,bserver,cserver:" 
read input
echo "You entered: $input"
case "$input" in 
    "aserver")
        echo "Logging into a. Please enter the passwords when prompted"
        ssh -t [email protected] "ssh -t aserver "su - gsxp -c "sqlplus grep_ro/pwd"""
        ;;
    "bserver")
        echo "Logging into b. Please enter the passwords when prompted"
        ssh -t [email protected] "ssh -t bserver "su - gsxp -c "sqlplus grep_ro/pwd"""
        ;;
    "cserver")
        echo "Logging into c. Please enter the passwords when prompted"
        ssh -t [email protected] "ssh -t cserver "su - gsxuserp -c "cd """

        ;;
        *) 
        echo "Incorrect Option entered. Exiting the script"
        ;;
esac

答え1

なぜそれを使用しないのですかsu - gsxuserp -c "tail -f ../random_directory/file_in_random_directory"

それぞれが新しいセッションを開始し、単一のコマンドを実行してから閉じるため、複数はsu意味がありません。その後のものは、以前のディレクトリがどのディレクトリにあるかを覚えておらず、毎回呼び出しスクリプトのディレクトリを継承します。

完全なコマンドは(コメントを引用する他の答えから引用されます)です。

ssh -t [email protected] ssh -t cserver 'su - gsxuserp -c \"tail -f ../random_directory/file_in_random_directory\"'

一連の二重引用符だけでなく、一重引用符と二重引用符(およびエスケープされた二重引用符)の使用に注意してください。

答え2

これは答えではなく、追加の形式が必要な説明に近いです。

引用が間違っています。二重引用符は入れ子にされずに切り替わります。

ssh -t [email protected] "ssh -t bserver "su - gsxp -c "sqlplus grep_ro/pwd"""
# .... unquoted ..........^..quoted.......^..unquoted...^....quoted.........^^^

実際のsshコマンドには、以下のパラメーターがあります。

ssh -t \
    [email protected] \
    "ssh -t bserver " \
    su  \
    -  \
    gsxp  \
    -c  \
    "sqlplus grep_ro/pwd"

これがより合理的です:

ssh -t [email protected] ssh -t bserver "su - gsxp -c 'sqlplus grep_ro/pwd'"

関連情報