我需要从bash脚本处理库的共享库依赖项.该for命令逐字处理:
for DEPENDENCY in `otool -L MyApplication | sed 1d`
do
...
done
Run Code Online (Sandbox Code Playgroud)
逐行处理结果的方法是什么?
我有一个变量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不适合我,因为我正在进行密集的字符串操作,并且代码格式也很重要.
假设我有.env文件包含如下行:
USERNAME=ABC
PASSWORD=PASS
Run Code Online (Sandbox Code Playgroud)
与普通的export前缀不同,所以我无法直接获取文件.
创建从.env文件加载内容并将其设置为环境变量的shell脚本的最简单方法是什么?
我正在尝试执行一个简单Bash Script的PHP脚本.我从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) 我正在创建一个 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)
结果将是三个标签,而不是预期的两个: …
我在这里搜索过类似的问题,但令人惊讶的是找不到任何问题.
在GNU bash中,有一个名为" arrays "的(一个构造?一个结构?一个数据类型?).数组在bash文档中有详细记录,所以我认为我理解了基础知识.
但突然间,在文档中也出现了"列表"一词.例如,在讨论文件名扩展时使用它(强调是我的):
如果出现其中一个字符,则该单词被视为模式,并替换为与该模式匹配的按字母顺序排列的文件名列表(请参阅模式匹配).
因此,我有三个问题:
IFS,或者与数组相同?还有另一种使用"名单"一词在谈论一个或多个管道的序列时,但我知道,很可能意味着不同类型的列表.
当"列表"优于数组时,有哪些用例?例如,让我们进行比较.让我们创建两个文件:
$ 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)
虽然这两个结果完全相同,但是当数组和列表返回不同的结果时是否存在任何情况?
我可能会混淆一些东西,因为在上面的例子中,它似乎是一个"包裹"在数组中的列表.我不知道它是否有所作为.
我想允许用空格捕获字符串,以便:
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)
可能?
我遇到一个问题,将参数传递给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"周围没有引号?
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)
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 …