我正在尝试编写一个函数来替换exit内置函数的功能,以防止自己退出终端。
我曾尝试使用SHLVL环境变量,但它在子外壳中似乎没有改变:
$ echo $SHLVL
1
$ ( echo $SHLVL )
1
$ bash -c 'echo $SHLVL'
2
Run Code Online (Sandbox Code Playgroud)
我的功能如下:
exit () {
if [[ $SHLVL -eq 1 ]]; then
printf '%s\n' "Nice try!" >&2
else
command exit
fi
}
Run Code Online (Sandbox Code Playgroud)
不过,这不允许我exit在子外壳中使用:
$ exit
Nice try!
$ (exit)
Nice try!
Run Code Online (Sandbox Code Playgroud)
检测我是否在子shell中的好方法是什么?
当我尝试获取 12 月 31 日的周数时,它返回 1。当我获取 12 月 30 日的周数时,我得到 52 --- 这是我所期望的。星期一是正确的日子。这是在运行 Ubuntu 的 RPI 上。
$ date -d "2018-12-30T1:58:55" +"%V%a"
52Sun
$ date -d "2018-12-31T1:58:55" +"%V%a"
01Mon
Run Code Online (Sandbox Code Playgroud)
没有时间字符串的相同问题
$ date -d "2018-12-31" +"%V%a"
01Mon
Run Code Online (Sandbox Code Playgroud) 以下数组表示每台 linux 机器上的磁盘数量
每个单个阵列都包含linux 机器上的磁盘数量。
echo ${ARRAY_DISK_Quantity[*]}
4 4 4 4 2 4 4 4
Run Code Online (Sandbox Code Playgroud)
识别所有数组的值都相等的简单方法是什么?
良好状态:
4 4 4 4 4 4 4 4
Run Code Online (Sandbox Code Playgroud)
状态不佳:
4 4 4 4 4 4 2 4
Run Code Online (Sandbox Code Playgroud)
状态不佳:
6 6 6 6 6 6 6 6 6 6 2 6 2
Run Code Online (Sandbox Code Playgroud) 我有一个 json 对象存储在 shell 变量中json:
{
"name": "foo",
"array": [
{
"name": "bar",
"thing": true
},
{
"name": "baz",
"thing": false
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想new_key向 中的两个对象添加一个新键(让我们称之为 )array。我可以执行以下操作:
$ jq '.array[] + {"new_key": 0}' <<<"$json"
{
"name": "bar",
"thing": true,
"new_key": 0
}
{
"name": "baz",
"thing": false,
"new_key": 0
}
Run Code Online (Sandbox Code Playgroud)
但是,这只返回数组数组,而不返回整个对象。我怎样才能就地修改变量或返回整个对象?
我正在尝试开发一个工具,用于通过 API 将数据发送到 github gist。问题是 github api 将要点视为content一行,所有转义序列都按字面写出,如下所示:
{
"test.txt": {
"filename": "test.txt",
"type": "text/plain",
"language": "Shell",
"raw_url": "https://gist.githubusercontent.com/jessebutryn/5c8b2a95b4b016e2fa33edee294c732b/raw/474f72ad32c843c18e9a61a228a31df6b85a8da1/test.txt",
"size": 96,
"truncated": false,
"content": "#!/bin/sh\n\n# comment\nfunc () {\n\tfor ((i=1;i<10;i++)); do\n\t\t:\n\tdone\n}\n\nprintf '%s\\n' Foo bar baz\n"
}
}
Run Code Online (Sandbox Code Playgroud)
该内容显示如下:
#!/bin/sh
# comment
func () {
for ((i=1;i<10;i++)); do
:
done
}
printf '%s\n' Foo bar baz
Run Code Online (Sandbox Code Playgroud)
需要将其转换为:
#!/bin/sh\n\n# comment\nfunc () {\n\tfor ((i=1;i<10;i++)); do\n\t\t:\n\tdone\n}\n\nprintf '%s\\n' Foo bar baz\n
Run Code Online (Sandbox Code Playgroud)
有没有任何工具可以一次性完成此操作?sed如果没有,有谁知道如何使用标准 UNIX 工具来完成它?
注意:原始文本中的任何文字转义序列都需要进行转义,以防止 github 解释它们(但这将是一个次要问题,不一定需要在这个问题中解决,但如果有的话那就太好了) :
IE:
printf '%s\n' Foo …Run Code Online (Sandbox Code Playgroud) bash 手册页说明了有关read内置的以下内容:
退出状态为零,除非遇到文件尾
这最近咬了我,因为我-e设置了选项并使用以下代码:
read -rd '' json <<EOF
{
"foo":"bar"
}
EOF
Run Code Online (Sandbox Code Playgroud)
我只是不明白为什么在这种情况下非成功退出是可取的。在什么情况下这会有用?
当我curl在下一个脚本中对命令使用实际值时,它正在工作并返回结果,但是当我使用变量时,它无法正常工作
我认为这是我如何在命令中定义它们的问题
amz_t=$(cat amazon-token.txt )
flx_id=$(cat flex-id.txt )
ses_t=$(cat session-token.txt )
curl -s -H 'Host: flex-capacity-na.amazon.com' \
-H 'Cookie: session-token='$ses_t'' \
-H 'x-amz-access-token: '$amz_t'' \
-H 'x-flex-instance-id: '$flx_id'' \
-H 'Accept: */*' \
-H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' \
-H 'Accept-Language: en-us' \
--compressed 'https://flex-capacity-na.amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt
Run Code Online (Sandbox Code Playgroud)
这是我尝试在脚本中运行的命令,上面提到的 txt 文件只包含某些值,没有垃圾值。
我有多个包含 12 行和 3 列的文本文件。
例子:
2 6 0.74
42 6 0.58
80 6 0
112 6 0.24
132 6 1
216 6 0.7
342 6 0
390 6 0.21
432 6 0.56
466 6 0.75
524 6 0.6
646 6 0.9
Run Code Online (Sandbox Code Playgroud)
我想在所有行中将第三列的所有值设置为 1。
输出应如下所示:
2 6 1
42 6 1
80 6 1
112 6 1
132 6 1
216 6 1
342 6 1
390 6 1
432 6 1
466 6 1
524 6 1
646 6 …Run Code Online (Sandbox Code Playgroud) 我正在尝试重命名一些图像:
IMG_1.JPG
IMG_2.JPG
IMG_3.JPG
Run Code Online (Sandbox Code Playgroud)
我想,以取代IMG与img和.JPG与.jpg-我知道该怎么做第二部分:
$ rename 's/\.JPG$/\.jpg/' *.JPG
Run Code Online (Sandbox Code Playgroud)
我的问题是,我似乎无法mv IMG_.JPG到img_.jpg-我知道你可以通过多种模式来rename,但我似乎无法使用现有的文件名以小写修正值。
我该怎么做?