相关疑难解决方法(0)

全局 bash_profile

我知道有/etc/profile,并/etc/bashrc设置全局环境变量,也许我只是误解他们的目的文件,但...

有全局bash_profile文件吗?

我使用的是 Mac OS X

osx bash etc profile bashrc

31
推荐指数
1
解决办法
7万
查看次数

在 htop 输出中将减号作为命令的第一个字符是什么意思?

在 htop 或其他显示进程状态的命令中,所有 bash 进程都在命令列中

/bin/bash
Run Code Online (Sandbox Code Playgroud)

但是一个进程在命令列中

-bash
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

shell process

24
推荐指数
1
解决办法
4643
查看次数

PATH 变量在 bash 中的设置位置的完整视图

我已经在几个地方读过PATH设置/etc/profile.profile主目录中的文件。

这些是路径设置的唯一地方吗?我想更好地理解它。

/etc/profile文件中,如以下注释所述"system-wide .profile file for the Bourne shell"。这是否意味着配置文件是 bash 的主要配置文件?

在那个文件中,我根本没有看到PATHvar 被设置。在.profile主目录中的文件中有这一行:

PATH="$HOME/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

这是PATH通过外观重置的,因为它将已经设置的$PATH字符串与$HOME/bin:正确的字符串连接起来?但是,如果etc/profile~/.profile是唯一的文件上设置PATH其中$PATH在该行的代码来了,如果它不定义/etc/profile

有经验的人可以对PATH变量进行广泛而详细的解释吗?谢谢!

path environment-variables

23
推荐指数
3
解决办法
5万
查看次数

为什么 'echo $0' 对两个不同的终端给出不同的结果?

我用开在Ubuntu终端Ctrl+ Alt+ T,并通过进入到一个目录,然后右击并选择“打开在终端”不同的终端。

echo $0在这两种情况下都做了。

在第一种情况下:

$ echo $0
-bash
Run Code Online (Sandbox Code Playgroud)

在第二种情况下:

$ echo $0
/bin/bash
Run Code Online (Sandbox Code Playgroud)

为什么会有这种差异?

bash ubuntu terminal gnome-terminal

17
推荐指数
3
解决办法
2万
查看次数

是否有非交互式登录 shell?

我知道交互式/非交互式和登录/非登录 shell 之间的区别是什么,但在实践中似乎永远不会有非交互式登录shell,除非您/bin/bash --login some-script.sh在脚本中有类似的东西(甚至看起来有点奇怪)。这是正确的还是它们更常见?

shell

14
推荐指数
1
解决办法
2955
查看次数

systemd 和终端启动程序的区别

我很好奇这些程序之间的区别是什么;通过 systemctl 启用时使用 systemd 启动,而/etc/rc.local通过 CLI 或通过 CLI启动的启动。

例如,我最近在树莓派上使用 shairport-sync。最初,我通过启用 sudo systemctl 的 shairport-sync 将 shairport-sync 设置为启动。

后来我使用其中的一个功能在shairport-sync连接设备之前运行脚本并发布。

令我惊讶的是,执行时的脚本shairport-sync没有kill arecordaplay

然而,当我将通过终端执行,杀死了脚本运行脚本arecordaplay

为了进一步混淆自己,我shairport-sync通过终端杀死并启动它以查看正在发生的事情的输出。当我这样做时,当设备连接并杀死arecordaplay. 所以,作为一个修复我禁用shairport-syncsysmtectl,并设置它在运行/etc/rc.local作为一个快速修复。之后reboot它按我的预期运行。

这让我相信作为一部分运行systemd的程序与通过/etc/rc.local或 CLI启动时运行的程序之间存在一些差异。

为什么会发生这种情况?这是因为运行级别不同吗?什么黑魔法?

设备连接时运行的脚本shairport-sync如下:shairportstart.sh

#!/bin/sh
/usr/bin/sudo /bin/pkill arecord
if [ $(date +%H) -ge "18" -o $(date +%H) -le "7" ]; then
        /usr/bin/amixer set …
Run Code Online (Sandbox Code Playgroud)

shell permissions systemd raspberry-pi raspbian

12
推荐指数
1
解决办法
1万
查看次数

是否有可能存在非交互式登录 shell?

在解释这个流程图时

在此处输入图片说明

我在 man bash 中发现:

当 bash 作为交互式登录 shell 或作为具有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。

这表明交互式登录shell 读取/etc/profile(没有 --noprofile)

此外,选项为read 的非交互式shell--login/etc/profile

这似乎留下一些可能的登录炮弹(其中$0一个开始-),其被非交互式(运行脚本,也许就这么简单date)可能无法读取(源)/etc/profile

确认或否认这个想法:

首先,我尝试使用su -l -,它以 a-作为第一个字符启动登录外壳,但我未能使其非交互式(并且能够提供测试来探测它)。

调用类似的东西

$ bash -c 'date' -bash
Run Code Online (Sandbox Code Playgroud)

不报告为登录 shell(即使第一个字符是 a -)。

试试这个来揭示细节:

   $ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash
      -bash hBc ||shopt -u login_shell||
      Fri …
Run Code Online (Sandbox Code Playgroud)

startup bash login bashrc

11
推荐指数
1
解决办法
1625
查看次数

.bash_logout 的目的是什么?

问题“ .bashrc 的目的是什么以及它是如何工作的? ”寻求.bashrc的目的和用途.bashrc。另一个具有相似名称的文件是.bash_logout.

这个文件应该首先存在吗?如果有,这个文件的作用是什么?

bash bashrc

11
推荐指数
3
解决办法
2万
查看次数

是否有一个 Bash 文件,无论是登录还是非登录,都将始终以交互模式获取?

据我所知,交互shell可能登录也可能不登录,它们的启动文件是不一样的。

  • 如果交互式 + 登录外壳?/etc/profile然后第一个可读的~/.bash_profile, ~/.bash_login, 和~/.profile
  • 如果交互式 + 非登录 shell ?/etc/bash.bashrc然后~/.bashrc

每次使用交互式 shell 时,我都想设置一些变量,无论它是否是登录 shell。

bash login bashrc

10
推荐指数
1
解决办法
3488
查看次数

$PATH 本身与 echo $PATH

当我$PATH像下面那样输入时,输出开始, -bash:然后是$PATHthen的值,最后它打印,: No such directory 而输出echo $PATH不产生该输出。
是否readline涉及bash ?

[user1@Server1 ~]$ $PATH
-bash: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user1/.local/bin:/home/user1/bin: No such file or directory
Run Code Online (Sandbox Code Playgroud)

当我只做echo $PATH输出时:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user1/.local/bin:/home/user1/bin
Run Code Online (Sandbox Code Playgroud)

bash

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