Если вы используете 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
Если prog2
следует общепринятому соглашению, вы можете использовать -
в качестве «файла», чтобы сказать ему читать из стандартного ввода, а затем конвейер будет
prog1 <inputfile> - min max | prog2 - <outputfile> min max
, который сообщит prog1 для записи в stdout
в качестве выходного файла, а prog2
будет использовать stdin
в качестве входного файла с конвейером, соединяющим эти два.
Это не приведет к автоматической сортировке их, но вы можете добавить это в конвейер:
prog1 <inputfile> - min max | sort | prog2 - <outputfile> min max
И параметры не влияют на конвейер. Вам просто нужно убедиться, что программы в конвейере умеют читать из stdin (если они находятся на правой стороне канала) и писать в stdout (если они находятся на левой стороне канала).