小编Mic*_*mer的帖子

如何从 UTF-8 文件中删除 BOM?

我有一个带有 BOM 的 UTF-8 编码文件,想删除 BOM。是否有任何 linux 命令行工具可以从文件中删除 BOM?

$ file test.xml
test.xml:  XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
Run Code Online (Sandbox Code Playgroud)

command-line unicode files

113
推荐指数
6
解决办法
14万
查看次数

如何在 shell 脚本中“导出”环境变量?

我有多个 Amazon EC2 账户,并希望能够$EC2_HOME使用脚本快速切换变量,例如。

我有一个如下设置的shell脚本:

#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,我知道EC2_HOME已设置,但我认为使用export会使变量在脚本完成后继续存在。它没有,因为运行echo $EC_HOME不会显示任何内容。

我知道这一定是非常初级的 Linux 脚本知识,但我不知道。我试图在没有运气的情况下寻找相关问题 - 如果这是重复的,我深表歉意。

shell bash shell-script environment-variables

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

shell 中的 "..."、'...'、$'...' 和 $"..." 引号之间有什么区别?

有时候,我看到shell脚本使用所有的引用一些文字,这些不同的方式:"..."'...'$'...',和$"..."。为什么有这么多不同类型的引用被使用?

他们的行为是否有所不同或影响了我在他们内部可以做的事情?

shell bash zsh shell-script quoting

57
推荐指数
1
解决办法
7660
查看次数

打算在 bash 中使用 ctrl+T 吗?

我注意到 bash 有一个快捷方式ctrl+ T,它交换光标前的最后两个字符。

我想知道为什么工程师决定包括这个。

  • 它是从以前的公约继承的吗?
  • 或者这是否有常用的实际目的?

bash keyboard-shortcuts history

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

如何将二进制文件转储为 C/C++ 字符串文字?

我有一个二进制文件,我想包含在我的 C 源代码中(暂时用于测试目的),所以我想以 C 字符串的形式获取文件内容,如下所示:

\x01\x02\x03\x04
Run Code Online (Sandbox Code Playgroud)

这可能吗,也许是通过使用odhexdump实用程序?虽然不是必需的,但如果字符串可以每 16 个输入字节换行到下一行,并在每行的开头和结尾包含双引号,那就更好了!

我知道字符串将嵌入空值 ( \x00),因此我需要在代码中指定字符串的长度,以防止这些字节提前终止字符串。

c hexdump xxd

44
推荐指数
3
解决办法
4万
查看次数

如果引用变量为空,如何将其扩展为空?

说我有一个脚本在做:

some-command "$var1" "$var2" ...
Run Code Online (Sandbox Code Playgroud)

而且,如果var1为空,我宁愿将其替换为空字符串而不是空字符串,以便执行的命令是:

some-command "$var2" ...
Run Code Online (Sandbox Code Playgroud)

并不是:

some-command '' "$var2" ...
Run Code Online (Sandbox Code Playgroud)

有没有比测试变量并有条件地包含它更简单的方法?

if [ -n "$1" ]; then
    some-command "$var1" "$var2" ...
    # or some variant using arrays to build the command
    # args+=("$var1")
else
    some-command "$var2" ...
fi
Run Code Online (Sandbox Code Playgroud)

是否有参数替换可以在 bash、zsh 等中扩展为空?我可能仍然想在其余参数中使用通配符,因此禁用它并取消引用变量不是一种选择。

bash zsh shell-script variable

39
推荐指数
2
解决办法
7031
查看次数

哪个手册页描述了计算机开机的过程?

几年前,我记得使用终端并阅读 Linux 手册(使用man)中有关计算机打开后如何工作的教程。它引导您完成了整个过程,解释了 BIOS、ROM、RAM 和操作系统在此过程中的作用。

这是哪个页面,如果有的话?我怎样才能再读一遍?

linux man boot

36
推荐指数
2
解决办法
3502
查看次数

使管道中的程序认为它有 tty

测试环境:

$ mkdir testdir
$ cd testdir
$ echo | tee "file 
name"
Run Code Online (Sandbox Code Playgroud)

现在,ls将打印file?name(至少在 Ubuntu GNU bash 下),而ls | cat将在单独的行中打印filename

我想要实现的是,file?name用管道版本打印,所以像

$ something ls | cat` or `ls | something | cat` or `ls | something cat
Run Code Online (Sandbox Code Playgroud)

换句话说,如何让像ls这里这样的命令陷入思考,它有一个 TTY,当它没有时,在 shell 中?

注意: ls这里只是一个示例程序,我正在寻找通用解决方案,而不是特定于程序的解决方案ls -q | cat

shell pipe tty

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

如何使用适用于 Linux 的 Windows 子系统访问 UNC 路径?

我已经下载了适用于 Windows 10 的 BASH。我将如何像在 Windows 环境中那样导航到网络地址?我已经看到提到的 SAMBA 并下载了smbclient

我试过了:

smbclient \\localhost\
Run Code Online (Sandbox Code Playgroud)

我收到错误

ERROR: Could not determine network interfaces, you must use a interfaces config file
Run Code Online (Sandbox Code Playgroud)

我是 BASH 的新手用户,并认为这是提高效率的机会。

作为奖励,请展示我如何完成一些常见任务,例如通过网络复制文件,以及如何进行身份验证,因为此类操作可能需要这样做。

windows-subsystem-for-linux

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

POSIX 在命令替换中引用此处的文档需要什么?

如何将 HEREDOC 文本带入 shell 脚本变量中?有人报告了一个问题,使用here 文档$(...)命令替换内使用带引号的分隔符,其中\文档内行尾的反斜杠触发换行符连接行继续,而命令替换的相同 here 文档按预期工作。

这是一个简化的示例文档:

cat <<'EOT'
abc ` def
ghi \
jkl
EOT
Run Code Online (Sandbox Code Playgroud)

这包括一行末尾的一个反引号和一个反斜杠。分隔符被引用,因此正文内部不会发生扩展。在所有 Bourne-alikes 中,我可以找到逐字输出内容。如果我将相同的文档放在命令替换中,如下所示:

x=$(cat <<'EOT'
abc ` def
ghi \
jkl
EOT
)
echo "$x"
Run Code Online (Sandbox Code Playgroud)

那么它们的行为不再相同:

  • dashashzshksh93、 BusyBox ashmksh和 SunOS 5.10 POSIXsh都像以前一样给出了文档的逐字内容。
  • Bash 3.2 给出了一个不匹配的反引号的语法错误。使用匹配的反引号,它尝试将内容作为命令运行。
  • Bash 4.3 将“ghi”和“jkl”折叠成一行,但没有错误。该--posix选项不影响此。Kusalananda告诉我(谢谢!)它的pdksh行为方式相同

在最初的问题中,我说这是 Bash …

shell-script posix command-substitution here-document

21
推荐指数
1
解决办法
1938
查看次数