Изменить:
Предполагая, что вы не можете изменить код программы, вы можете написать короткий сценарий-оболочку, который экспортирует
food.sh
как глобальная переменная, а затем выполнит ее.
И, если вы хотите полностью удалить зависимость каталога от этого сценария, вы также можете экспортировать сценарий оболочки. Это позволит вам запускать скрипт из любого пути в этом сеансе оболочки
и всегда получать выходной файл в папке / home /
Wrapper script wrapper_food.sh
:
#!/bin/bash
export mkfood="/home/shadowme/mkfood.sh"
cd /home/shadowe/testdir/
$mkfood
Вывод:
$ ls testdir
food.0.txt
Экспорт сценария оболочки:
$ export wrapper_food=/home/shadowe/wrapperfood.sh
Затем вы можете вызвать приведенный выше сценарий из любого места в той же оболочке:
$ $wrapper_food
Исходный ответ:
Вообще говоря, на ум приходят три способа избежать cd / home /
перед touch
:
touch
с полным путем к каталогу, в котором нужно создать food.txt
touch
sh
. Можно выбрать каждое из вышеперечисленных в зависимости от варианта использования. Например, если я хочу всегда создавать файлы в одном каталоге, я не буду использовать параметр аргумента, потому что это более длинный ввод. Вместо этого я сохраню путь как переменную.
Приведенный ниже сценарий предоставляет примеры для каждого из вышеперечисленных в порядке их упоминания.
Входные данные:
$ ./mkfood.sh /home/shadowe/testdir
Выходные данные:
$ ls /home/shadowe/testdir
food1.txt food2.txt food.txt
Скрипт:
#!/bin/bash
# store path as variable
dir_path="/home/shadowe/testdir"
touch $dir_path/food.txt
#direct path
touch /home/shadowe/testdir/food1.txt
# argument pass
touch $1/food2.txt
Наконец, даже если его не спрашивали, можно также передать имя файла, который будет создан, в качестве аргумента, изменив команду аргумента на коснитесь $ 1 / $ 2
. Например:
$ ./mkfood.sh /home/shadowe/testdir food2.txt
Используйте ksh
ANSI strings особенность:
echo $'\033[1;31m${var[a]}\t$time\t$end\t$day\t$score\033[m'
то есть ваша строка с escape-символами ANSI, встроенными в $ '...'
.
Примечание. Вам понадобится ksh93 (ksh88 не поддерживает эту функцию).