Наличие дополнительных параметров в конвейере или перенаправлении

Если вы используете readlink -e , это предполагает GNU coreutils. Но использование ls для получения значения inode является косвенным. Используя stat (также из того же пакета coreutils), вы можете напрямую получить значение inode. Если вы ограничите сравнение индексными дескрипторами, вы также можете предотвратить удаление символических ссылок, которые вы, возможно, настроили так, чтобы указывать на ваш скрипт.

Вот пример:

#!/bin/sh
mynode=$(stat --printf='%i' $(readlink -e "$0"))
while [ $# -ne 0 ]
   do
    if [ ! -e "$1" ] ; then
            echo "File not found."
    elif [ -d "$1" ] ; then
            echo "Error. You have entered a directory."
    else
        itnode=$(stat --printf='%i' "$1")
        if [ $mynode = $itnode ] ; then
            echo "Attempting to delete $0 - operation aborted"
            exit 0
        fi    

        echo "$1_$itnode:$(readlink -e "$1")" >> /home/j.t/.restore.info
        mv "$1" "/home/j.t/deleted/$1_$itnode"

        echo "File '$1' has been moved to the recycle bin."
    fi

    shift
done
0
26.08.2015, 21:40
1 ответ

Если prog2 следует общепринятому соглашению, вы можете использовать - в качестве «файла», чтобы сказать ему читать из стандартного ввода, а затем конвейер будет

prog1 <inputfile> - min max | prog2 - <outputfile> min max

, который сообщит prog1 для записи в stdout в качестве выходного файла, а prog2 будет использовать stdin в качестве входного файла с конвейером, соединяющим эти два.

Это не приведет к автоматической сортировке их, но вы можете добавить это в конвейер:

prog1 <inputfile> - min max | sort | prog2 - <outputfile> min max

И параметры не влияют на конвейер. Вам просто нужно убедиться, что программы в конвейере умеют читать из stdin (если они находятся на правой стороне канала) и писать в stdout (если они находятся на левой стороне канала).

2
29.04.2021, 00:24

Теги

Похожие вопросы