如何在su命令中使用cd命令?

如何在su命令中使用cd命令?

在下面的脚本中,aserver 和 bserver 工作正常。但在上面的“cserver”情况下,在 su - gsxuserp 之后,我需要使用同一用户执行以下三个选项。

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'"

相关内容