我创建了一个.screenrc
文件,用于在运行时自动设置各种窗口screen
。在一个窗口中,我想:切换到 root 用户,然后更改到某个目录。我目前在创建新屏幕窗口后手动执行此操作,如下所示:
sudo bash
cd /etc/[dir]/
我怎样才能在 中复制它.screenrc
?我在其他地方读到过,要在一行上运行多个命令,可以使用&&
,但我似乎无法让它工作sudo bash
(可能是因为它创建了一个新的 bash 实例,因此其余命令要么被忽略,要么在新实例中运行然后退出)。
答案1
(可能是因为它创建了一个新的 bash 实例
su
是的,它与几乎所有用户切换机制( 、等)相同sudo -s
,但您的变体可以非常明显地表明bash
正在运行新进程。
因此其余命令要么被忽略,要么在新实例中运行然后退出)。
不,父 shell 只是等待sudo
(因此也等待新的 bash 实例)退出。(就像任何其他命令一样。)
- 主外壳运行
sudo bash
并等待其退出。- sudo 运行
bash
并等待其退出。- bash 为您提供了一个交互式提示,您可以在其中运行 root 命令。
- 当您输入“exit”时,bash 退出。
- sudo 完成等待,清理并退出。
- sudo 运行
- 主 shell 完成等待,如果有的话,运行下一个命令。
-c
但是,你可以告诉任何 shell 使用其接受单个命令行的选项以非交互方式执行命令:例如bash -c "cd /etc && ls"
。 (这在后台由ssh
或使用su -c
。)
要获得交互式 shell,只需确保该子命令中的最后一个命令是运行交互式 shell 的命令。(这涉及相当多的 bash 实例,但实际上不是问题。)
sudo bash -c "cd /etc/foo && bash"