Почему делает использование . file
в ударе выполняют файл, даже если это не и исполняемый файл? Это, потому что это использует текущую сессию удара для выполнения его так, это работает как ввод bash file
?
Кроме того, вдоль подобных строк. Я знаю тот ввод > file
удаляет содержание файла. Но почему? Я понимаю, что это отправляет стандартный вход в файл. Но разве стандарт не вводится клавиатура? Таким образом, разве я не должен переходить к новой строке в вещах типа и теории?Я не понимаю.
В первую очередь . file
не выполняет файл, он поставляет его. Тот мог бы походить на педантичный пункт, но есть важное различие. Когда Вы выполняете файл, им управляют в его собственной подраковине; любые переменные, определенные в нем, например, не будут размножены к родительской сессии. Чтобы проиллюстрировать, рассмотрите этот сценарий (foo.sh
), который просто устанавливает переменную и затем печатает ее:
foo="bar"
echo "In the script, foo is $foo"
Теперь, давайте установим переменную foo
во что-то, затем давайте управлять тем сценарием и, как только это закончено, echo $foo
:
$ foo="baz"
$ bash foo.sh
In the script, foo is bar
$ echo $foo
baz
, Как Вы видите, $foo
, был установлен в сценарии, но это не изменило ценность переменной в родительской раковине. Контрастное вышеупомянутое с тем, что происходит, если мы поставляем сценарий вместо этого:
$ . foo.sh
In the script, foo is bar
$ echo $foo
bar
На этот раз, потому что сценарий был поставлен, переменная была также изменением в родительской раковине.
<час> Эти > file
более просто. >
оператор открывает файл (или создает его, если это не существует) для написания, и немедленно уже переписывает что-либо в файле. Поэтому, если Вы просто будете бежать > file
ни с чем иным, то эти >
освободит файл, если он будет существовать.
Постарайтесь не задавать два несвязанных вопроса на той же почте.
1: это точно не работает как bash file
потому что последний пробег новая раковина в то время как .
использование та же текущая раковина. Это работает как source file
.
2: вход стандарта по умолчанию - действительно обычно клавиатура, но с управлением > file
, нет никакой команды, чтобы бежать. Раковина просто обрабатывает переназначения, тогда заканчивает обработку (недостающей) команды. То, что Вы описываете, было бы cat > file
.