小编wja*_*rea的帖子

KSH/BASH 数组的最大大小

ksh 和 bash 脚本的最大数组大小是多少?

示例:假设我有一个包含 10 个元素的数组。数组的特定索引可以容纳的最大字符串数是多少?相同的数组的最大大小是多少?

我是 Unix 的新手。我想这是一个常见问题,但我没能找到答案,所以我决定在这里提问。

bash ksh shell-script

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

为什么“echo 123 >(cat)”的输出中有“/dev/fd/63”?

$ echo 123 | cat 
123
Run Code Online (Sandbox Code Playgroud)

正在做我所期望的,两个命令都在同一个 shell 中运行。

但是,当我将它们与>( ... )表达式连接起来时,该表达式将 shell 中的一个命令的输出连接到子 shell 中的第二个命令,我得到了这个:

$ echo 123 >(cat)
123 /dev/fd/63
Run Code Online (Sandbox Code Playgroud)

对于其他值也是如此:

$ echo 101 >(cat)
101 /dev/fd/63

$ echo $BASHPID >(cat)
3252 /dev/fd/63
Run Code Online (Sandbox Code Playgroud)

我认为command1 >(command2)与 相同command1 | command2,但是在 中command1 >(command2),每个命令都在不同的 shell 中,因此它们应该具有相同的输出。我哪里错了?

bash pipe io-redirection file-descriptors process-substitution

7
推荐指数
3
解决办法
6552
查看次数

在 Bash 的别名中插入用户定义的变量

我想为我的.bashrc文件中的命令添加别名,如下例所示:

alias take_row="cat prova.csv_001.txt | awk -v nrow="${nrow}" '{if (NR==nrow) print}'"
Run Code Online (Sandbox Code Playgroud)

但是我想nrow在从终端启动命令时指定变量。举个例子:

take_row 1 --> 脚本取第一行

take_row 20 --> 脚本取第 20 行

如何在命令中写入诸如<command> | <read nrow user input>等之类的内容?

bash alias variable

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

Git Bash - ls 显示 git repo 文件夹

我有一个文件夹 /c/Tools,其中包含三个文件夹。

我想要一个像下面这样的命令

$ ls --show-repositories
Run Code Online (Sandbox Code Playgroud)

Tools 不是 git 存储库,但 Tools/MyProject 和 Tools/MyApp 都是。我想要的输出是:

drwxr-xr-x 1 0018121 Domain Users    0 Dec 14 14:33 MyProject/ (develop)
drwxr-xr-x 1 0018121 Domain Users    0 Dec 14 14:17 Data/
drwxr-xr-x 1 0018121 Domain Users    0 Dec 14 12:08 MyApp/ (master)
-rw-r--r-- 1 0018121 Domain Users 399K Aug  4 10:41 readme.txt
-rw-r--r-- 1 0018121 Domain Users 136K Aug  4 10:20 image.jpg
Run Code Online (Sandbox Code Playgroud)

所以从父文件夹我可以判断子文件夹是否是当前有效的 git 存储库(以及当前签出的分支)

谢谢

bash git

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

文件中的奇怪字符

我有一个 UTF-8 文件,其中包含一个奇怪的字符——对我来说就像

<96>
Run Code Online (Sandbox Code Playgroud)

这是它的显示方式 vi

vi 截图

以及它如何出现 gedit

gedit 截图

以及它在 LibreOffice 下的显示方式

LibreOffice 屏幕截图

这使得一系列基本的 Unix 工具行为不端,包括:

  1. cat file使角色消失,more以及
  2. 我无法在 vi/vim 中复制和粘贴——它甚至找不到自己
  3. grep 也无法显示任何内容,就好像该字符不存在一样。

该程序file运行良好并识别出一个 UTF-8 文件。我也知道,由于文件的性质,它很可能来自网络上的复制和粘贴,并且该字符最初代表 EMDASH。

我的基本问题是:

  1. 这个文件有什么问题吗?
  2. 如何在同一个文件中搜索它的其他出现?
  3. 如何 grep 其他可能包含相同问题/字符的文件?

该文件可以在这里找到:file.txt

character-encoding unicode

6
推荐指数
1
解决办法
7401
查看次数

ln:使用另一个符号链接创建符号链接

假设我有一个文件和一个目录:

$ ls -l
total 4
drwxrwxr-x. 2 user user 4096 Oct  8 09:53 dir
-rw-rw-r--. 1 user user    0 Oct  8 09:53 file
Run Code Online (Sandbox Code Playgroud)

我创建了一个到filecalledsymlink1的符号链接,以及一个到dircalled的符号链接dirslink1

$ ls -l
drwxrwxr-x. 2 user user 4096 Oct  8 09:53 dir
lrwxrwxrwx. 1 user user    3 Oct  8 10:03 dirslink1 -> dir
-rw-rw-r--. 5 user user    0 Oct  8 09:53 file
lrwxrwxrwx. 1 user user    4 Oct  8 09:53 symlink1 -> file
Run Code Online (Sandbox Code Playgroud)

现在我创建了symlink1使用ln …

ln

5
推荐指数
2
解决办法
1365
查看次数

bash + 通过正则表达式验证名称

valid当名称为 时,为什么会打印以下正则表达式hdpworker01

name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
Run Code Online (Sandbox Code Playgroud)

我尝试做的是valid仅在名称匹配时才打印worker[0-999]

预期结果示例:

  • 对于name=worker01valid
  • 对于name=hdpworker01:没有输出

linux bash shell-script regular-expression

4
推荐指数
1
解决办法
500
查看次数

递归shell脚本来列出文件

我正在尝试编写一个 shell 脚本,列出目录(和子目录)中的某些类型的文件。我正在努力解决递归部分。

这是我所拥有的:

#!/bin/sh

#download dir
DOWNLOADING_DIR=/Users/richard/Downloads

echo "Starting Script..."

for FILE in $DOWNLOADING_DIR/*
do
    if [ -d "$FILE" ]
    then
        echo "...Checking Directory "$FILE
        for DFILE in $FILE/*
        do
            echo "Found file ... $DFILE"
        done
    else
        echo "Found file ... $FILE"
        echo ""
    fi
done
Run Code Online (Sandbox Code Playgroud)

问题是当它找到目录时,它在目录中找不到任何文件名。它只列出子目录名称而不是子目录中的文件。它适用于第一个目录中的文件。

我需要这个脚本来搜索 .txt 或 .doc 文件并将它们移动到另一个目录。

shell directory

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

在两个单词之间打印月份

我正在编写一些脚本并且遇到了一些命令。我想将一些字符串(月份)放入现有文本中的特定位置。例子:

Left Right 
Run Code Online (Sandbox Code Playgroud)

如何在左右之间放置一些文本?我试过打印,但它不能像我想要的那样工作。

date +'%b' | awk '{print "Left " $1} {print "Right"}'
Run Code Online (Sandbox Code Playgroud)

这一行添加了我不想添加的新行。

Left Jun
Right
Run Code Online (Sandbox Code Playgroud)

awk string date

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

在每个匹配行之间插入单词

我想知道如何在 while 循环中检查文件的结尾。我在这里做的是如果有一些词,例如“菠萝”、“苹果”、“洋葱”、“橙色”等,我想使用 grep 命令查找包含特定词的行并发表一些评论“窗户”。例如,如果我使用grep 'a' 'file',那么它会找到“菠萝”、“苹果”和“橙色”。然后,最后我想把它打印成“菠萝,窗户,苹果,窗户,橙子,窗户”,像这样。所以,我想在 while 或 for 循环中设置一些条件。任何帮助将不胜感激。

编辑:示例输入

apple
banana
pineapple
orange
mandu
ricecake
meat
juice
milk
onion
green onion
Run Code Online (Sandbox Code Playgroud)

使用 grep 命令时的预期输出 --> grep 'a' 'file name'

apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
Run Code Online (Sandbox Code Playgroud)

linux shell bash

3
推荐指数
1
解决办法
268
查看次数