标签: bash

#!/bin/sh 和 #!/bin/bash 有什么区别?

如果我写,

#!/bin/bash
echo "foo"
Run Code Online (Sandbox Code Playgroud)

或者

#!/bin/sh
echo "foo"
Run Code Online (Sandbox Code Playgroud)

两者产量相同。我见过一些以#!/bin/sh或开头的脚本#!/bin/bash。它们之间有什么区别吗?

bash scripts sh shebang

359
推荐指数
4
解决办法
71万
查看次数

354
推荐指数
5
解决办法
59万
查看次数

以另一个没有密码的用户身份运行 shell 脚本

我想以没有密码的其他用户身份从主 ubuntu shell 运行脚本。

我有完整的 sudo 权限,所以我尝试了这个:

sudo su -c "Your command right here" -s /bin/sh otheruser
Run Code Online (Sandbox Code Playgroud)

然后我必须输入我的密码,但我不确定该脚本现在是否真的在该用户下运行。

我如何确认脚本现在确实在该用户下运行?

command-line bash sudo

329
推荐指数
4
解决办法
79万
查看次数

如何查看bash历史中的时间戳?

有什么办法可以从 bash 历史记录中查看命令是在什么时间执行的?我们可以看到订单,但有什么办法我也能得到时间吗?

底线:Bash 历史中的执行时间

command-line bash environment-variables history timestamp

324
推荐指数
4
解决办法
53万
查看次数

如何彻底清除 bash 历史记录?

我想从我的服务器的历史记录中清除所有以前的命令。我使用过history -c,似乎所有内容都已清除,但是当我通过 ssh 连接到服务器时,所有命令仍然存在。

如何永久清除它们?

bash history

318
推荐指数
7
解决办法
78万
查看次数

'sudo su -' vs 'sudo -i' vs 'sudo /bin/bash' - 什么时候使用哪个重要,还是根本不重要?

当我做一些需要连续输入几十次 root 的事情时,我更喜欢将我的会话切换到 root 会话。在各种教程和说明我已经使用了互联网上,我看到了sudo susudo su -sudo -isudo /bin/bash用来打开一个root会话,但我不会在这些当之间,或者说差异事项的区别清楚。

有人可以帮我解决这个问题吗?

command-line bash sudo su

308
推荐指数
2
解决办法
46万
查看次数

如何使 ZSH 成为默认 shell?

我正在尝试将 ZSH 设置为我的默认 shell,但是它不断恢复为 bash。

我试过这个代码:

sudo chsh -s $(which zsh)
Run Code Online (Sandbox Code Playgroud)

我也试过:

sudo chsh -s /bin/zsh 
Run Code Online (Sandbox Code Playgroud)

还尝试了没有 sudo 的这些命令。关于我还需要做什么的任何想法。从 bash 中运行 ZSH 时,它会加载并正常工作,但我想将其设置为默认 shell。

command-line bash zsh

237
推荐指数
4
解决办法
54万
查看次数

211
推荐指数
4
解决办法
13万
查看次数

为什么 ~/.bash_profile 在打开终端时没有得到来源?

问题

我有一个 Ubuntu 11.04 虚拟机,我想设置我的 Java 开发环境。我做了如下

  1. sudo apt-get install openjdk-6-jdk
  2. 将以下条目添加到~/.bash_profile

    export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
    
    export PATH=$PATH:$JAVA_HOME/bin
    
    Run Code Online (Sandbox Code Playgroud)
  3. 保存更改并退出

  4. 再次打开终端并输入以下内容

    echo $JAVA_HOME   (blank)
    echo $PATH        (displayed, but not the JAVA_HOME value)
    
    Run Code Online (Sandbox Code Playgroud)
  5. 什么也没发生,就像 JAVA_HOME 的导出和它添加到 PATH 从未完成一样。

解决方案

我不得不去~/.bashrc并在文件末尾添加以下条目

#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

问题

  1. 为什么我必须这样做?我认为 bash_profile、bash_login 或 profile 在没有这两个的情况下会在 bashrc 之前首先执行。
  2. 在这种情况下,我的终端是非登录shell 吗?
  3. 如果是这样,为什么在终端之后执行 su 并输入密码时,它没有执行我还设置了上述导出的配置文件?

bash .profile environment-variables bashrc source

209
推荐指数
5
解决办法
36万
查看次数

我可以在 Bash 中使 Tab 自动完成不区分大小写吗?

Ubuntu 的终端使用区分大小写的自动完成功能,正如我认为 Linux 所期望的那样。

但我认为使用不区分大小写的名称通常会更方便,以节省您在开始名称时必须准确的情况,并且可能值得额外的误报。是否有可能改变这种行为?

command-line bash auto-completion case-insensitive

206
推荐指数
4
解决办法
11万
查看次数