关于linux profile 文件中如下代码

本文解析了Shell中的默认选项,如i-interactive、H-historyexpand、B-braceexpansion等,并详细介绍了它们的功能及应用场景。

转: http://kodango.com/explain-shell-default-options

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null 2>&1
        fi
    fi
done 

echo $- 结果为:himBH
$-记录着当前设置的shell选项,himBH是默认值,
你可以通过 set 命令来设置或者取消一个选项配置。例如:set -x

i - interactive
包含这个选项说明当前的 shell 是一个交互式的 shell,何为交互式?你输入命令,
shell 解释执行后给你返回结果,我们在 Terminal 下使用的 shell 就是交互式的,
所以 $- 会包含 i 字符。如果我们在一个脚本里面 echo $-,
结果是不会包含 i 的。

H - history expand

history expand 这个很多人都基本上不用,包括我也是。我们知道 Shell 会把我们执行的命令记录下来,
可以通过 history 命令查看,每一行是序号 + 执行的命令。
在 shell 退出时,会将这些信息保存到~/.bash_history 文件中,
当然在启动时也会从该文件中加载,不信删除这个文件再打开一个终端试试。
history expand 就是展开历史列表中的命令,可以通过!感叹号来完成,
例如"!!"返回上最近的一个历史命令,"!n"返回第 n 个历史命令,等等.
多扯一句,在命令行下,不要在双引号号里面用!,这会让 Shell "误以为" 你要执行历史展开.

B - brace expansion
和备份相关
$ cp /your/path/to/file{,.bak}

m - monitor mode
可以控制进程的停止、继续,后台或者前台执行等。正常情况下,在交互式模式下,
该选项默认是打开的,所以再执行一个比较耗时的命令时,你可以按下CTRL+Z 让它在后台运行,
然后可以用 fg 命令将后台运行的任务恢复到前台执行。

h - hashall
不知

${-#*i} 翻译过来是说,从左往右看,删除掉 $- 变量的值中第一个 i 字符以及之前的内容。
与此相对的,还有${-%i*}的写法,%与#号的意义刚好相反,从右往左看,删除掉 $- 变量的值中
最后一个 i 字符以及之后的内容。

### Java Linux 文件路径 中文字符 乱码 解决方案 对于Java程序在Linux环境下读取包含中文字符的文件路径时出现乱码的问题,可以采取多种方法来解决这个问题。 #### 设置JVM参数 一种有效的方法是在启动Java应用程序时通过命令行传递`-Dfile.encoding=UTF-8`参数给JVM。这会强制整个虚拟机使用指定的字符集处理字符串,从而避免因默认编码不同而导致的乱码现象[^1]。 ```bash java -Dfile.encoding=UTF-8 -jar your-application.jar ``` #### 修改系统属性 另一种方式是在代码内部修改系统的编码设置。可以在应用初始化阶段执行如下语句: ```java System.setProperty("sun.jnu.encoding", "UTF-8"); System.setProperty("file.encoding", "UTF-8"); ``` 这段代码的作用是显式地告诉操作系统以及Java运行环境应该采用何种编码格式解析文件名和其他文本数据[^3]。 #### 处理具体场景下的输入输出流 当涉及到具体的文件操作时,确保所有的InputStreamReader, OutputStreamWriter等类都指定了正确的字符集。例如: ```java try (BufferedReader reader = new BufferedReader( new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) { String line; while ((line = reader.readLine()) != null) { // Process the file content here... } } catch (IOException e) { throw new RuntimeException(e); } ``` 以上措施能够有效地防止由于平台间编码差异所引起的乱码问题,并且适用于大多数情况下的跨平台开发需求。 #### 验证服务器配置 确认Linux服务器上的区域和语言环境变量已正确设置为支持多字节字符的语言包,比如`zh_CN.UTF-8`。可以通过查看或调整`.bashrc`, `.profile`或其他shell配置文件中的相应部分实现这一点。此外,也可以临时更改当前终端会话的locale设置来进行测试验证: ```bash export LANG=zh_CN.UTF-8 ``` 这样做的目的是为了使所有基于该用户的进程都能继承这些环境变量值,进而减少潜在的兼容性障碍[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值