标签: bash

如何将多行文件名连接到一个自定义分隔符?

我希望将结果加入ls -1到一行中并用我想要的任何内容划分它.

我可以使用任何标准的Linux命令来实现这一目标吗?

linux bash shell merge parsing

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

使用多个命令查找-exec

我试图使用find -exec与多个命令没有任何成功.有人知道以下命令是否可行?

find *.txt -exec echo "$(tail -1 '{}'),$(ls '{}')" \;
Run Code Online (Sandbox Code Playgroud)

基本上,我试图在当前目录中打印每个txt文件的最后一行,并在行的末尾打印,后跟文件名的逗号.

bash find

397
推荐指数
9
解决办法
28万
查看次数

shell脚本可以设置调用shell的环境变量吗?

我正在尝试编写一个shell脚本,在运行时,将设置一些将在调用者的shell中保留的环境变量.

setenv FOO foo
Run Code Online (Sandbox Code Playgroud)

在csh/tcsh中,或

export FOO=foo
Run Code Online (Sandbox Code Playgroud)

在sh/bash中只在脚本执行期间设置它.

我已经知道了

source myscript
Run Code Online (Sandbox Code Playgroud)

将运行脚本的命令而不是启动新的shell,这可能导致设置"调用者"环境.

但这里有一个问题:

我希望这个脚本可以从bash或csh调用.换句话说,我希望任何一个shell的用户都能够运行我的脚本并改变他们的shell环境.所以'source'对我来说不起作用,因为运行csh的用户无法获取bash脚本,而运行bash的用户无法获取csh脚本.

有没有合理的解决方案不需要在脚本上编写和维护两个版本?

bash shell csh tcsh

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

bash中字符串的长度

如何获取存储在变量中的字符串的长度并将其分配给另一个变量?

myvar="some string"
echo ${#myvar}  
# 11
Run Code Online (Sandbox Code Playgroud)

如何将另一个变量设置为输出11

variables bash string-length

393
推荐指数
9
解决办法
47万
查看次数

如何向shell脚本添加进度条?

在bash或*NIX中的任何其他shell中编写脚本时,在运行将需要几秒钟的命令时,需要一个进度条.

例如,复制一个大文件,打开一个大的tar文件.

您建议以哪些方式向shell脚本添加进度条?

bash shell zsh

390
推荐指数
18
解决办法
30万
查看次数

在shell中获取程序执行时间

我想在几个不同的条件下在linux shell中执行一些东西,并能够输出每次执行的执行时间.

我知道我可以编写一个可以执行此操作的perl或python脚本,但有没有办法在shell中执行此操作?(恰好是bash)

linux bash shell

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

在bash shell脚本中使用getopts来获取长和短的命令行选项

我希望使用我的shell脚本调用多种形式的命令行选项.

我知道getopts可以使用,但就像在Perl中一样,我无法对shell做同样的事情.

关于如何做到这一点的任何想法,以便我可以使用如下选项:

./shell.sh --copyfile abc.pl /tmp/
./shell.sh -c abc.pl /tmp/
Run Code Online (Sandbox Code Playgroud)

在上面,两个命令对我的shell意味着相同的东西,但使用getopts,我还没有能够实现这些?

bash getopt getopts command-line-arguments

390
推荐指数
17
解决办法
39万
查看次数

检查Bash数组是否包含值

在Bash中,测试数组是否包含某个值的最简单方法是什么?

编辑:在答案和评论的帮助下,经过一些测试后,我想出了这个:

function contains() {
    local n=$#
    local value=${!n}
    for ((i=1;i < $#;i++)) {
        if [ "${!i}" == "${value}" ]; then
            echo "y"
            return 0
        fi
    }
    echo "n"
    return 1
}

A=("one" "two" "three four")
if [ $(contains "${A[@]}" "one") == "y" ]; then
    echo "contains one"
fi
if [ $(contains "${A[@]}" "three") == "y" ]; then
    echo "contains three"
fi
Run Code Online (Sandbox Code Playgroud)

我不确定它是否是最佳解决方案,但似乎有效.

arrays bash

387
推荐指数
18
解决办法
47万
查看次数

385
推荐指数
13
解决办法
19万
查看次数

如何从shell脚本获取密码而不进行回显

我有一个脚本可以自动执行需要访问受密码保护的系统的进程.通过命令行程序访问系统,该程序接受用户密码作为参数.

我想提示用户键入他们的密码,将其分配给shell变量,然后使用该变量构建访问程序的命令行(这当然会产生我将处理的流输出).

我是Bourne/Bash中一个相当称职的shell程序员,但我不知道如何接受用户输入而不让它回显到终端(或者可能使用'*'字符回显).

有人能帮忙吗?

bash shell scripting sh

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