小编Sha*_*sai的帖子

在 Linux 中创建零字节文件的概念是什么?

如果我执行以下操作:

touch /tmp/test
Run Code Online (Sandbox Code Playgroud)

然后执行

ls -la /tmp/
Run Code Online (Sandbox Code Playgroud)

我能看到的test文件,0字节的目录。

但是操作系统如何处理0 Bytes的概念。如果我用外行的话来说:

0 字节根本就不是内存,因此没有创建任何内容。

创建一个文件,必须或至少应该需要一定的内存,对吗?

linux filesystems files

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

是否可以在 shell 脚本中使用像“fg”这样的命令?

我正在尝试创建一个有趣的终端屏幕保护程序,其中包含cmatrix程序包(将终端变成类似于电影《黑客帝国》的程序包)并xprintidle确定终端的空闲时间。

我从SuperUser 的这个线程答案中获得了一些帮助,并使用了类似于它的 shell 脚本,如下所示:

屏幕保护程序

#!/bin/sh
set -x  # Used for debugging
IDLE_TIME=$((60*1000)) #a minute in milliseconds

screen_saver(){
# My screensaver function
    cmatrix -abs
}

sleep_time=$IDLE_TIME
triggered=false

while sleep $(((sleep_time+999)/1000)); do
    idle=$(xprintidle)
    if [ $idle -ge $IDLE_TIME ]; then
        if ! $triggered; then
            screen_saver
            triggered=true
            sleep_time=$IDLE_TIME
        fi
    else
        triggered=false
        sleep_time=$((IDLE_TIME -idle+100))
    fi
done
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令在前台运行脚本时,该脚本运行完美:

./screensaver.sh
Run Code Online (Sandbox Code Playgroud)

我可以看到矩阵终端被触发。

但是,如果我在后台运行它&;该功能screen_saver()在后台触发,我无法查看。查看矩阵终端的唯一可能方法是使用fg将其置于前景的方式。

问题

fg是否可以在函数中使用screen_saver()以下命令:

screen_saver(){
     cmatrix -abs && …
Run Code Online (Sandbox Code Playgroud)

shell job-control shell-script jobs

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

是否可以使用 bash bang (!) 和历史记录来替换/更改参数

我目前对 Linux 中的和based功能着迷history!bash

我已经习惯使用!!!:<argc>类似的功能,但是是否有某种方式,例如,如果我之前添加了错误的参数而犯了错误,那么我可以删除该错误的参数并再次使用命令行。

例子

如果我犯了如下错误:

      mv -r movableFolder/ targetFolder/
Run Code Online (Sandbox Code Playgroud)

由于没有-r选项mv,我想使用一些!技巧来删除它:

      mv movableFolder/ targetFolder/
Run Code Online (Sandbox Code Playgroud)

我知道我可以从上面的历史命令中执行以下操作:

     mv !:2 !:3
Run Code Online (Sandbox Code Playgroud)

但有什么办法可以mv!命令来代替吗?

bash command-history

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

bash 无法识别 for 循环中字符串数组的每个元素的 if 条件

目标

我用来让用户将密码插入到与某些模板文件whiptail结合使用的文件中。envsubst

whiptail清单

为了渲染内容,whiptail我使用以下内容:

declare -A availableServices=(
    [grafana]="Grafana Dashboard"
    [influxdb]="InfluxDB v1.x TSDB"
    [node-red]="Node-RED Flow UI"
    [portainer]="Portainer Container Mgmt"
)

# Render TUI
function askGenerateCredential() {
    local message="Set Password for particular Service\n
                Press <SPACEBAR> to Select \n
                Press <Enter> to Skip
                "
    local arglist=()
    
    # Generate a String for Whiptail Checkboxes
     # FORMAT: "<INDEX> <DESCRIPTION> <OFF>"
    for index in "${!availableServices[@]}";
    do
        # Default all Services are NOT-Selected (OFF)
        arglist+=("$index" "${availableServices[$index]}" "OFF")
    done
    SELECTED_SERVICES+=$($WHIPTAIL --title "Available …
Run Code Online (Sandbox Code Playgroud)

bash shell-script

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