La plupart des outils Unix sont conçus pour bien fonctionner avec des fichiers texte. Un fichier texte se compose d'une séquence de lignes. Une ligne se compose d'une séquence de caractères imprimables se terminant par un caractère de nouvelle ligne. En particulier, le dernier caractère d'un fichier texte non vide est toujours un caractère de nouvelle ligne. Évidemment, example.txt
contient uniquement some text
sans nouvelle ligne finale, il ne s'agit donc pas d'un fichier texte.
cat
fait un travail simple; transformer des fichiers arbitraires en fichiers texte ne fait pas partie de ce travail. Certains autres outils transforment toujours leur entrée en fichiers texte; si vous n'êtes pas sûr que le fichier que vous affichez se termine par une nouvelle ligne, essayez d'exécuter awk 1
au lieu de cat
.
Vous pouvez faire en sorte que bash affiche son invite sur la ligne suivante si la commande précédente a laissé le curseur ailleurs que dans la dernière marge. Mettez ceci dans votre .bashrc
(variation par GetFree d'une proposition de Dennis Williamson ):
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
Gilles 'SO- arrête d'être méchant'
la source
cat
, donc je vais garder cela en dernier recours pour le moment où ce problème recommence à me déranger.PROMPT_COMMAND
et, si ce n'est pas 0, utiliser un newline (\n
) comme premier caractère dePS1
.Je préfère la méthode suivante ...
Cela n'évalue pas le contenu
example.txt
ou n'ajoute pas occasionnellement une nouvelle ligne. Il fait simplement écho à une nouvelle ligne une fois le chat terminé, est facile à retenir et personne ne se demande s'il utilise correctement les citations fortes ou faibles.Le seul inconvénient est que vous obtiendrez une nouvelle ligne supplémentaire si le fichier a sa propre nouvelle ligne de fin.
la source
J'ai commencé à utiliser la réponse de @ Gilles, mais j'ai constaté que si le terminal changeait le nombre de colonnes, l'invite ne serait plus au début d'une ligne comme prévu. Cela peut se produire pour diverses raisons, notamment les divisions tmux / écran, le redimensionnement manuel d'un conteneur GUI, les changements de police, etc.
Ce que je voulais vraiment, c'était quelque chose qui ajouterait une nouvelle ligne si le terminal commençait à imprimer son invite à autre chose que la première colonne. Pour ce faire, j'avais besoin de comprendre comment obtenir la colonne actuelle, que j'ai utilisée pour obtenir cette réponse . La configuration finale de l'invite de travail est ci-dessous:
la source
__get_terminal_column
?PS1="\n"
je viensecho
et je n'ai pas besoin de modifierPS1
.Le problème avec cela pourrait être que votre example.txt n'a pas de nouvelle ligne à la fin de votre fichier.
la source
cat
le travail, donc je cherche probablement une solution.example.txt
ne pas avoir une nouvelle ligne à la fin du fichier est tout le point de la question.Si vous insistez sur l'utilisation
cat
, cela fonctionne pour les deux types de fichiers, avec et sans retour à la ligne à la fin:Vous pouvez le transformer en fonction avec un nom de votre choix (pair
cat
) dans votre.bashrc
:la source
vous pouvez également ajouter à .bashrc
travaille pour moi.
la source