سؤال

هل هناك أي اختلافات بين ":> ملف" و "> ملف"?

$ : > file.out
$ ls -l file.out
-rw-rw----   1 user    user             0 Mar 18 21:08 file.out
$ > file.out
$ ls -l  file.out
-rw-rw----   1 user    user             0 Mar 18 21:08 file.out
هل كانت مفيدة؟

المحلول

: هل القذيفة المدمجة في عملية NO-OP أو NULL. لذا ، نعم ، ينتهي توجيهه إلى ملف بملف فارغ ، وكذلك توجيه أي شيء إلى ملف. أعتقد أن هناك شعورًا بأن مصدرك هو نوع مختلف من لا شيء ، لكن النتيجة هي نفسها. تبعا إلى دليل البرمجة النصية المتقدمة, ، ال "> file.out"الصياغة لن تعمل على بعض الأنظمة.

لاحظ أنه في كلتا الحالتين (على عكس "اللمس") ، سيتم استبدال محتويات الملف دون أي شيء إذا كان الملف موجودًا بالفعل.

نصائح أخرى

استخدام : > file.out أكثر محمولة لغير الباش. على سبيل المثال ، يحدد ZSH القالب الفارغ الافتراضي cat, ، ليس : (ما لم يكن في وضع المحاكاة). إذا انتهى بك الأمر إلى حاجة إلى جعل البرنامج النصي يعمل مع أ /bin/sh وهو ليس باش (على سبيل المثال ، نظام *BSD ، أي نظام تشغيل مغلق المصدر ، أو حتى في بعض توزيعات GNU/Linux الآن ، حيث يتم استخدام DASH) ، ستجعل حياتك أسهل إذا كنت تستخدم : > file.out

وفقا ل Posix ، كلا العمل ولكن الإصدار مع : يتم إحباط إذا فشل إعادة التوجيه في حين أن الإصدار مع إعادة التوجيه فقط يعيد فقط حالة خروج غير صفرية. في الحالة الأخيرة ، يكون الاستخدام أكثر قدرة على الاستخدام true.

باش فقط هذا الحق في وضع posix.

الاسم المستعار أو الوظائف المسمى : انتهاك قيود posix على التطبيق وليست محمولة.

الفرق الوحيد الذي يمكنني التفكير فيه هو أنه يمكنك إعادة تعريف : عبر الاسم المستعار أو تعريفات الوظيفة. على سبيل المثال ، قد ترغب في اقتطاع الملفات معظم الوقت (باستخدام السلوك الافتراضي لا شيء :) ، لكن ملفات إجبار على أن يكون لها رأس قياسي في بعض الحالات. الاستمارة > file لا يمكن إعادة تعريفها.

علي سبيل المثال:

#! /bin/bash

test -n "$ADD_COPYRIGHT" &&
  :() { echo "# Copyright (c) 2010 MyName"; echo; }

# Truncate the file to zero size, unless ADD_COPYRIGHT is set, in which case
# the file is truncated to contain only a copyright notice.
: > file

# Add content to the file
some_command >> file
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top