相关疑难解决方法(0)

登录 Shell 和非登录 Shell 的区别?

我了解交互式 shell 和非交互式 shell 之间的基本区别。但是,登录 shell 与非登录 shell 的确切区别是什么?

你能举例说明非登录交互式shell 的使用吗?

shell login

435
推荐指数
7
解决办法
25万
查看次数

是否有所有 shell 读取的“.bashrc”等效文件?

~/.bashrc 唯一指定用户特定环境变量、别名、PATH变量修改等的地方吗?

我问是因为这似乎~/.bashrcbash-only,但其他 shell 也存在......

bash environment-variables profile

126
推荐指数
4
解决办法
5万
查看次数

当我的系统管理员拒绝让我更改它时,我如何使用 bash 作为我的登录 shell

Unix的系统管理员那里我的工作是不愿意给我访问我的登录shell从改变kshbash。他给出了各种借口,最有趣的是因为他们编写了所有脚本,ksh因为如果我尝试运行它们,它们将无法工作。我不知道他从哪里得到这些想法,但既然我无法说服他,我还有其他选择吗?

chsh安装在这些机器上,但我们使用公钥/私钥对登录,我没有任何密码,所以当chsh提示我输入密码时,我没有什么可以提供的。)

shell login profile

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

我应该将我的语言环境设置为什么以及这样做的含义是什么?

这个问题是通过询问Chromium 浏览器不允许为“打印到文件”设置默认纸张大小的问题 以及在聊天中与@Gilles 进行对话而激发的。正如@don_crissti 所指出的,并经我证实,更改语言环境(至少LC_PAPER)会影响选择的纸张尺寸。

我从来没有想过要选择什么,而且总是选择,en_US.UTF-8因为这似乎是一个合理的默认选择。

但是,根据聊天中的@Gilles(请参阅从http://chat.stackexchange.com/transcript/message/17017095#17017095开始的对话)。摘录:

吉尔斯:LC_PAPER 默认为 $LANG

吉尔斯:你必须有 LANG=en_US.UTF-8。这是一个坏主意:它设置了 LC_COLLATE 而这几乎总是一件坏事

Gilles:LC_COLLATE 没有描述正确的排序规则,它太严格了(它逐个字符)删除 LANG 而是设置 LC_CTYPE 和 LC_PAPER

Gilles:加上 LC_MESSAGES 如果你想要非英语的消息

显然,这里有一些我不知道的问题,我相信还有很多其他问题。那么,在设置语言环境时应该考虑哪些问题,又应该如何设置呢?我一直只是dpkg-reconfigure locales在 Debian 中运行,并没有三思而后行。

具体问题:我应该将语言环境设置为 en_IN.UTF-8 吗?这样做有什么缺点吗?

另请参阅:LC_COLLATE 是否(应该)影响字符范围?

locale

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

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

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

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

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

bash login bashrc

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

约定个人环境变量

Unix设置个人环境变量有约定吗?我读到它们应该被放入$HOME/.bash_profile而不是$HOME/.bashrc. 尽管如此,我正在考虑提供一种方法来区分我自己的变量。这样即使我忘记了,我也能一眼看出它是否是我设置的。例如,当我在终端中进行自动完成时,我可以使我的变量以下划线或减号“m”开头,就像C++语言约定之一一样。我知道可能没有绝对的答案,但我想听听一些有助于实现此目的的良好实践和约定:提供一种简单的方法来区分系统环境变量和个人环境变量。

bash environment-variables

5
推荐指数
1
解决办法
2135
查看次数

带有 curl 的脚本手动工作但不在 cron 作业中

我的脚本(status.sh)是:

#!/bin/bash
SITE=http://www.example.org/

STATUS=$(/usr/bin/curl -s -o /dev/null -I -w "%{http_code}" $SITE)

if [ $STATUS -eq 200 ]
then
 echo $STATUS >> /home/myuser/mysite-up.log
else
 echo $STATUS >> /home/myuser/mysite-down.log
fi
Run Code Online (Sandbox Code Playgroud)

我跑:

$ chmod +x /home/myuser/status.sh
Run Code Online (Sandbox Code Playgroud)

然后在我的 crontab 上我得到了:

* * * * * /home/myuser/status.sh
Run Code Online (Sandbox Code Playgroud)

当我运行时:

$ /home/myuser/status.sh
Run Code Online (Sandbox Code Playgroud)

该文件/home/myuser/mysite-up.log包含:

200
Run Code Online (Sandbox Code Playgroud)

但是当 cron 运行时,该文件/home/myuser/mysite-up.log包含:

000
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

编辑: 我修改了脚本添加:

set -x
Run Code Online (Sandbox Code Playgroud)

正如@Sobrique 所建议的,我的输出是:

 SITE=http://www.example.org/
 /usr/bin/curl -s -o /dev/null -I -w '%{http_code}' http://www.example.org/
 STATUS=000
 '[' 000 -eq 200 ']'
 echo 000
Run Code Online (Sandbox Code Playgroud)

bash cron curl

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

标签 统计

bash ×4

login ×3

environment-variables ×2

profile ×2

shell ×2

bashrc ×1

cron ×1

curl ×1

locale ×1