相关疑难解决方法(0)

如何逐行处理shell中命令的输出?

我需要从bash脚本处理库的共享库依赖项.该for命令逐字处理:

for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
    ...
done
Run Code Online (Sandbox Code Playgroud)

逐行处理结果的方法是什么?

shell

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

如何为bash变量指定多行值

我有一个变量FOO与我需要分配一个多行的值.像这样的东西,

FOO="This is line 1
     This is line 2
     This is line 3"
Run Code Online (Sandbox Code Playgroud)

所以当我打印FOO它的值时应该给出以下输出.

echo $FOO
output:
This is line 1
This is line 2
This is line 3
Run Code Online (Sandbox Code Playgroud)

此外,行数将动态决定,因为我将使用循环初始化它.

主要使用的另一个问题中显示的答案read -d不适合我,因为我正在进行密集的字符串操作,并且代码格式也很重要.

bash shell

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

Shell如何从.env文件设置环境变量

假设我有.env文件包含如下行:

USERNAME=ABC
PASSWORD=PASS
Run Code Online (Sandbox Code Playgroud)

与普通的export前缀不同,所以我无法直接获取文件.

创建从.env文件加载内容并将其设置为环境变量的shell脚本的最简单方法是什么?

shell

9
推荐指数
4
解决办法
6954
查看次数

无法从PHP执行Bash脚本

我正在尝试执行一个简单Bash ScriptPHP脚本.我从HTML5前端页面收集数据,传递ajax给PHP脚本,获取变量,然后将这些变量传递给.sh脚本,但我有以下消息:

./test_bash.sh: line 13: ./test.txt: Permission denied
Run Code Online (Sandbox Code Playgroud)

我试图更改权限chmod 777 test_bash.sh,试图修改sudoers.d文件,试过这个:shell_exec("echo password_for_the_user | sudo -S command_to_execute");...但是Bash script无法写入test.txt文件.

这是我的基本代码,首先是PHP code:

<?php 
$var1 = json_decode($_POST['var1']); //from front-end html5
$var2 = json_decode($_POST['var2']);
$var3 = json_decode($_POST['var3']);

$response = shell_exec("./test_bash.sh $var1 $var2 $var3 2>&1");

echo "$response";
?>
Run Code Online (Sandbox Code Playgroud)

其次,Bash代码:

#!/bin/bash

var1=$1;
var2=$2;
var3=$3;

echo "$var1";
echo "$var2";
echo "$var3";

echo $var1 $var2 …
Run Code Online (Sandbox Code Playgroud)

php ajax bash html5 sudo

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

$ @和"$ @"之间有什么区别吗?

有什么区别$@"$@"

我知道非特殊字符可能存在差异,但@输入参数的符号呢?

bash expansion

7
推荐指数
2
解决办法
6282
查看次数

空格分隔值;如何提供包含空格的值

我正在创建一个 bash 脚本来通过Azure CLI预配多个 Azure 资源。到目前为止一切顺利,但是我在标记资源时遇到问题。

az我的目标是将多个标签存储在一个变量中,并将该变量提供给脚本中多个命令的 --tags 选项。然而问题是值中的空格将被解释​​为新键。

如果我们以命令az group update(将更新资源组)为例,文档对 --tags 选项进行了以下说明:

--tags 'key[=value]' 格式的空格分隔标签。使用“”清除现有标签。

当值(或键)包含空格时,必须将其括在引号中。因此,当我们直接向命令提供键值对(包括带空格的值)时(如下例所示),结果将符合预期:

az group update --tags owner="FirstName LastName" application=coolapp --name resource-group-name
Run Code Online (Sandbox Code Playgroud)

结果将是两个标签已添加到资源组中:

{
  "id": "/subscriptions/1e42c44c-bc55-4b8a-b35e-de1dfbcfe481/resourceGroups/resource-group-name",
  "location": "westeurope",
  "managedBy": null,
  "name": "resource-group-name",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": {
    "application": "coolapp",
    "owner": "FirstName LastName"
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我们将上一步中使用的相同值存储在变量中时,就会出现问题。

tag='owner="FirstName LastName" application=coolapp'
Run Code Online (Sandbox Code Playgroud)

我用来echo $tag验证变量是否包含与我们在上一个示例中为 --tags 选项提供的值完全相同的值:

owner="FirstName LastName" application=coolapp
Run Code Online (Sandbox Code Playgroud)

但是,当我们将此标签变量提供给命令的标签选项时,如下一行所示:

az group update --tags $tag --name resource-group-name
Run Code Online (Sandbox Code Playgroud)

结果将是三个标签,而不是预期的两个: …

bash tagging azure azure-cli azure-resource-group

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

什么是bash中的列表?

我在这里搜索过类似的问题,但令人惊讶的是找不到任何问题.

在GNU bash中,有一个名为" arrays "的(一个构造?一个结构?一个数据类型?).数组在bash文档中有详细记录,所以我认为我理解了基础知识.

但突然间,在文档中也出现了"列表"一词.例如,在讨论文件名扩展时使用它(强调是我的):

如果出现其中一个字符,则该单词被视为模式,并替换为与该模式匹配的按字母顺序排列的文件名列表(请参阅模式匹配).

因此,我有三个问题:

  1. "列表"在这里意味着什么?
  2. 它是否与for循环描述中的含义相同?
  3. 我在某种程度上迷失在bash的空白世界中.如果这个"列表"是一个单独的数组概念(正如我所想的那样),它是否在涉及空格时特别对待IFS,或者与数组相同?

还有另一种使用"名单"一词在谈论一个或多个管道的序列时,但我知道,很可能意味着不同类型的列表.


UPDATE

  1. 因为我看到这个"列表结构"的工作方式与数组的工作方式非常相似 - 它们之间有什么区别?

更新2

  1. 当"列表"优于数组时,有哪些用例?例如,让我们进行比较.让我们创建两个文件:

    $ touch file1.txt file2.txt

说到列表,我可以执行以下操作:

$ A=*.txt ; echo $A
file1.txt file2.txt
$ 
Run Code Online (Sandbox Code Playgroud)

当涉及到数组时,我可以执行以下操作:

$ B=(*.txt) ; echo ${B[@]}
file1.txt file2.txt
$ 
Run Code Online (Sandbox Code Playgroud)

虽然这两个结果完全相同,但是当数组和列表返回不同的结果时是否存在任何情况?


更新3

我可能会混淆一些东西,因为在上面的例子中,它似乎是一个"包裹"在数组中的列表.我不知道它是否有所作为.

arrays bash shell list

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

Bash:保留字符串,在命令行输入空格?

我想允许用空格捕获字符串,以便:

echo -n "Enter description: "
read input
echo $input
Run Code Online (Sandbox Code Playgroud)

会产生:

> Enter description: My wonderful description!
> My wonderful description!
Run Code Online (Sandbox Code Playgroud)

可能?

string bash input

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

从字符串中正确读取引用/转义的参数

我遇到一个问题,将参数传递给Bash脚本中的命令.

poc.sh:

#!/bin/bash

ARGS='"hi there" test'
./swap ${ARGS}
Run Code Online (Sandbox Code Playgroud)

交换:

#!/bin/sh
echo "${2}" "${1}"
Run Code Online (Sandbox Code Playgroud)

目前的输出是:

there" "hi
Run Code Online (Sandbox Code Playgroud)

只改变poc.sh(因为我相信swap做了我想要的正确),我如何让poc.sh传递"hi there"并测试两个参数,"hi there"周围没有引号?

bash shell sh

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

Why doesn't while ''IFS=, read -r part'' split a comma-separated string into two parts?

since the default value of the IFS variable is a newline/tab/space, the following code:

while read -r line
do
    echo $line
done <<< "hello\nworld"
Run Code Online (Sandbox Code Playgroud)

outputs:

hello
world
Run Code Online (Sandbox Code Playgroud)
but, if I understand it correctly, I can change it so it will separate it by, comma for example.

so this code:

while IFS=',' read -r part
do
    echo $part
done <<< "hello,world"
Run Code Online (Sandbox Code Playgroud)

but this one just outputs:

hello,world
Run Code Online (Sandbox Code Playgroud)

and I expected it to print the same as the script from before.

what …

unix bash ifs

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

标签 统计

bash ×8

shell ×5

ajax ×1

arrays ×1

azure ×1

azure-cli ×1

azure-resource-group ×1

expansion ×1

html5 ×1

ifs ×1

input ×1

list ×1

php ×1

sh ×1

string ×1

sudo ×1

tagging ×1

unix ×1