小编cod*_*ter的帖子

范围对象不支持分配

我不断收到TypeError'Range'对象不支持项目分配。我试着在范围之前添加iter(...)以及范围之前的list(...)来稍微更改代码。但是,它没有帮助,错误仍然存​​在。这是代码:

def findAnchor(anchors, node):
    start = node                   
    while node != anchors[node]:   
        node = anchors[node]       
    anchors[start] = node          
    return node

def unionFindConnectedComponents(graph):
    anchors = range(len(graph))        
    for node in iter(range(len(graph))):    
        for neighbor in graph[node]:   
            if neighbor < node:        
                continue

            a1 = findAnchor(anchors, node)       
            a2 = findAnchor(anchors, neighbor)   
            if a1 < a2:                          
                anchors[a2] = a1                 
            elif a2 < a1:                        
                anchors[a1] = a2                 

    labels = [None]*len(graph)         
    current_label = 0                  
    for node in range(len(graph)):
        a = findAnchor(anchors, node)  
        if a == node:                  
            labels[a] = current_label …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

echo删除Bash变量中的前导空格

新手在这里打击.我希望在bash中为一个变量添加一个空格,目前我有以下内容,它似乎不起作用:

space=`printf '%1s' ' '`
mystr='hello'

mystr="$space$mystr"
echo $mystr
Run Code Online (Sandbox Code Playgroud)

因此,我不希望打印出"hello",而是希望结果是"hello",它在开头有一个额外的空格.这样做的正确方法是什么?谢谢.

bash shell quoting

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

仅当输入大于屏幕尺寸时如何减少分页?

如果我想在程序的输出超过屏幕上的行数时清除屏幕并减少运行,我可以执行以下操作:

mypgm | tee mypgm.out
LEN=$(wc -l mypgm.out | cut -f1 -d' ')
[[ $LEN >= $LINES ]]; then
   clear
   less -R mypgm.out
fi
Run Code Online (Sandbox Code Playgroud)

只要输出中的任何行都没有环绕,它就可以正常工作,视觉上在屏幕上占据了不止一行。有没有一种简单的方法可以确定输出在视觉上占据了多少行,或者我是否必须循环输出文件,使用 $COLUMNS 计算长行需要显示的“行”数

linux bash terminal less-unix

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

cut:使用"/"作为分隔符

我试图在我的bash脚本中使用cut命令.我需要在其名称中获取包含'sys'的rpm包的名称,而不是其完整路径.所以我尝试了这个:

packageName=$(find temp/noarch/ -name '*sys*noarch.rpm' | cut -d "\/" -f 3)
Run Code Online (Sandbox Code Playgroud)

我以为这样可以在没有temp/noarch /的情况下返回包名,但它只告诉我.我知道我可以删除子串"temp\/noarch\/",但我想用切割它.

提前致谢 !

bash cut

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

调用带有与号的参数的 Bash 函数

我想要一个 bash 函数来改变这个……

download HELLO&P=1&Q=2
Run Code Online (Sandbox Code Playgroud)

进入这个……

aria2c -d ~/Downloads "HELLO&P=1&Q=2"
Run Code Online (Sandbox Code Playgroud)

HELLO&P=1&Q=2是一个磁力链接。如果它周围没有双引号,则 aria2c 不起作用。但我似乎无法把它们放在一起。问题似乎是 MAGNET 链接&key=value的末尾有一系列对(在我的示例中&P=1&Q=2),并且这些对似乎被剥离并与链接的其余部分分开(即HELLO)。

这是我的.bash_profile功能。

download() {
  aria2c -d ~/Downloads "$1"
}
Run Code Online (Sandbox Code Playgroud)

这是一个示例输出。

~ $ download HELLO&P=1&Q=2
[1] 7389
[2] 7390
aria2c -d /Users/lukejanicke/Downloads HELLO
[1]-  Done                    download HELLO
[2]+  Done                    P=1
~ $ 
Run Code Online (Sandbox Code Playgroud)

甚至不知道去了哪里Q=2。通过真正的 MAGNET 链接,所有部件都以这种枚举方式显示。

我需要某种方式将整个 MAGNET 链接捕获为单个参数,然后aria2c在链接周围使用引号执行命令。

bash aria2

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

如何让grep不解释我的搜索字符串中的特殊字符?

执行时./test.sh 12.34,grep应该匹配12.34而不是匹配12-34.如何实现这一目标?

#!/bin/sh

ip=$1  
echo $ip
if netstat | grep ssh | grep $ip;  then
        netstat | grep ssh | grep $ip
else
        echo 'No'
fi
Run Code Online (Sandbox Code Playgroud)

bash grep escaping

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

重命名每个组中的最新文件

我尝试创建一个应该检测每个组的最新文件的脚本,并为其原始名称添加前缀.

ll $DIR
asset_10.0.0.1_2017.11.19 #latest
asset_10.0.0.1_2017.10.28
asset_10.0.0.2_2017.10.02 #latest
asset_10.0.0.2_2017.08.15
asset_10.1.0.1_2017.11.10 #latest
...
Run Code Online (Sandbox Code Playgroud)

2个问题:

1)如何查找每个组的最新文件?

2)如何重命名只添加前缀

我尝试了以下过程,但它在整个目录中查找最新文件,并且不保留原始名称以向其添加前缀:

find $DIR -type f ! -name 'asset*' -print | sort -n | tail -n 1 | xargs -I '{}' cp -p '{}' $DIR...
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?(尽可能保持xargs)

linux bash shell

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

curl:JSON 中的意外令牌

当我尝试提交此内容时,服务器将消息发回给我

"Unexpected token t in JSON at position 1".

无论第一个非 { 非 " 字符是什么,它都会这样做。如果我输入 {"": ""} 它会说

"Unexpected token : in JSON at position 1".
Run Code Online (Sandbox Code Playgroud)

这是我的代码。

  curl -H "Content-Type: application/json" -d {"test": "test"} url
Run Code Online (Sandbox Code Playgroud)

我已经尝试了在它周围加上引号并转义引号的其他变体,但无济于事,但如果您认为这是问题,请随时提出一种格式。

bash json curl

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

在 Bash 中将秒添加到当前时间

我想加 10 秒 10 次。但我不太清楚如何为价值增加时间。

这是我的代码。

./time.sh

time=$(date)
counter=1
while [ $counter -le 10 ] 
do
    echo "$time"
    time=$('$time + 10 seconds') //error occurred.
    ((counter++))
done

echo All done
Run Code Online (Sandbox Code Playgroud)

bash time date

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

构造需要引号的命令参数

我有一个Bash脚本需要调用一个命令,该命令需要其中一个参数的引号.当我运行命令

myTimeCommand --time="2018 04 23 1100" -o /tmp/myOutput ~/myInput
Run Code Online (Sandbox Code Playgroud)

从命令行,它工作正常.在我的脚本中,我想传递"2018 04 23 1100"作为参数并将其直接发送到命令.

myScript --time="2018 04 23 1100"
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个时,我收到一条错误消息

""2018" is not a valid time.
Run Code Online (Sandbox Code Playgroud)

我正在使用getopt解析参数.这是我的剧本

OPTIONS=t:
LONGOPTIONS=time:

PARSED=$(getopt --options=$OPTIONS --longoptions=$LONGOPTIONS --name "$0" -- "$@")
echo ${PARSED}

# read getopt’s output this way to handle the quoting right:
eval set -- "$PARSED"

# now enjoy the options in order and nicely split until we see --
while true; do
    echo "option: ${1}"
    case "$1" in
        -t|--time)
            timeBase="$2"
            timeBase="--time=\"${timeBase}\"" …
Run Code Online (Sandbox Code Playgroud)

bash shell quotes

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

标签 统计

bash ×9

shell ×3

linux ×2

aria2 ×1

curl ×1

cut ×1

date ×1

escaping ×1

grep ×1

json ×1

less-unix ×1

python ×1

python-3.x ×1

quotes ×1

quoting ×1

terminal ×1

time ×1